网站大量收购闲置独家精品文档,联系QQ:2885784924

实验小组《OS操作系统实验一》----Shell解释程序实现文档.doc

实验小组《OS操作系统实验一》----Shell解释程序实现文档.doc

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验小组《OS操作系统实验一》----Shell解释程序实现文档

《OS操作系统实验一》: Shell解释程序(YSH0)实现文档OS实验小组 2005年6月12日星期日 王 克(组长) 杜可斌 徐 瑞 张 劲 目录: 1 概述 2 2 YSH0功能与设计 2 2.1 程序形式 2 2.2 内部命令和外部命令 2 2.3 重定向和管道命令 2 2.4 特殊命令键 3 2.5 程序结构图 3 3 命令行分析器设计 4 3.1 功能 4 3.2 实现 5 4 命令解释执行的实现 6 4.1 使用到的系统调用 6 4.2 程序结构 6 5 程序源代码相关说明 7 5.1 文件说明 7 5.2 主要函数说明 7 5.3 主要数据结构说明 7 6 简易测试 8 6.1 编译运行测试 8 6.2 内部命令测试 9 6.3 外部命令测试 9 6.4 重定向和管道命令测试 10 6.5 测试总结 10 7 总结及感想 10 7.1 王克 10 7.2 杜可斌 11 7.3 张劲 11 7.4 徐瑞 11 8 附录 11 8.1 参考资料 11 8.2 源代码 11 概述 由于时间和能力的限制,这个的实验是参考实验教程上源代码及相关说明,但程序源代码的差异性在60%以上,从整体结构设计到具体的实现细节都有不同程度的改进和提高,但也可能带来一些BUG。 通过对操作系统课程的学习,我们对Linux有了进一步更深入的认识,从它的使用到内核编译都有所了解。 第一个实验是实现在Linux下实现一个Shell解释程序,所以我们将其命名为Linux Shell 0(表示一个最简单的Shell程序)。它是用户与系统内核沟通的中介,为用户使用操作系统的服务提供一个命令界面。用户在提示符下输入一个命令,Shell先解释后通过内核函数调用执行。 YSH0功能与设计 程序形式 用户运行本程序,lsh0提供一个命令提示符[lsh0#],程序一直等待用户输入命令,直到exit命令结束。 内部命令和外部命令 解释器首先支持一定的内部命令,实现特定的动作,它包括: exit: 结束所有子程序并退出。 jobs:打印当前正在后台运行的作业和挂起的作业信息。本SHELL采用十分便于用户理解的格式。 fg %int:把进程标识符为<int>的作业放到前台运行。如果这个作业已经暂停,就让它继续开始运行。并开始等待此前台进程执行完毕。 bg %int:在后台执行进程标识符为<int>的已经挂起的进程。 外部命令的形式是一系列分隔的字符串。第一个字符串为可执行程序的程序名,其余的参数。它必将位于环境变量所设置的某个路径中,如果不存在则表示命令错误。 重定向和管道命令 SHELL的命令大部分都是从标准输入信息并将输出信息送到标准输出。分别缩写为stdin和stdout。默认情况下,stdin为键盘,stdout为屏幕。但可使用>和<将输入和输出重定向到文件中,>将信息存入一文件以便保存,而不送到屏幕。使用<将信息从文件中输入。并且两者可以组合使用。 SHELL也提供管道,利用管道可以将一个命令的输出作为另一个命令的输入来使用。这种方法比使用临时文件来连接两个命令要方便和高效的多。 特殊命令键 Ctrl + Z:产生SIGTSTP信号,这个信号是让SHELL挂起在前台运行的作业。如果没有任何前台作业,则无效。 Ctrl + C:产生SIGNT信号,这个信号是让SHELL杀死前台运行的作业的进程。如果没有任何前台作业,则无效。 程序结构图 命令行分析器设计 功能 为Shell程序提供命令行的分析,并对信息进行分析存储,为解释执行做好准备。当用户在提示符后面输入命令时,输入的整行内容为一个“命令行字符串”。lsh0分析器的先将保存起来,直到它的作业执行结束。 在执行一个命令行字符串时,lsh0也同时为其分配一个非负整数标识符,用来标识此作业的数据结构。当其作业执行完毕时,就删掉这个作业的整个数据结构。 实现 命令解释执行的实现 使用到的系统调用 pid_t for(void); int execv(const *file, char *const argv[]); void exit(int status); int wait(int *stat_loc); pid_t waitpid(pid_t pid; int *stat_loc, int options); int dup2(int fildes, int fides2); int pipe(int fides[2]); (详见教程上,不再赘述了) 程序结构 程序源代码相关说明 文件说明 文件名 说

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档