电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Linux简单的shell实现(附源代码)VIP免费

Linux简单的shell实现(附源代码)_第1页
1/22
Linux简单的shell实现(附源代码)_第2页
2/22
Linux简单的shell实现(附源代码)_第3页
3/22
Linux 下Shell 的实现说明文档 作业一实验要求: Shell 能够解析的语法为: commandline := pipecommand | pipecommand "&" commandline | empty pipecommand := redirectcommand | pipecommand "|" redirectcommand redirectcommand := command ">" outfile | command "<" infile | command "<" infile ">" outfile | command ">" outfile "<" infile | command command := program | command argument 1、需求说明和分析: 本作业要求为实现一个类似于 bash 的shell。要求支持后台命令,管道,重定向这三个基本功能。并在此基础上,实现一些简单的内部命令,例如 cd,pwd 等等。 2、设计方案: 1、 首先利用 readline()函数读到用户输入的shell 命令,采用一个数组来保存 shell命令,数组有固定的大小。 2、 在 main()函数中根据字符串中是否存在 "&" 字符判断是否为后台进程。如果是后台命令则判断是否是多条指令,如果不是将分割后的命令传递给 pipel()函数,如果是的话分割之后利用 while 循环将命令传递给 pipel()函数。如果不是后台进程,需要用 waitpid()函数等待子进程结束后父进程才继续。 3、在 pipel()函数中,将 shell 命令根据 "|" 字符分割成一个个重定向命令,利用 fork ()得到子进程,并完成管道的设置,然后对每个重定向命令调用 redirect()函数(如果没有 "|",则将整个 shell 命令调用 redirect()函数)。 4、在 redirect 函数里面,根据有没有”>”,”<”来判断是否需要重定向。如果不需要重定向,就直接对参数列表调用 execv(char *, char **)函数执行命令。如果需要重定向,进行相应的处理,再调用 execv()函数。 3 、储存结构 1、帮助文档的结构,方便Help命令的构建。 struct HELP_DOC { char *usage[lengthOfBUILTIN_COMMANDS]; //用法 char *info[lengthOfBUILTIN_COMMANDS]; //介绍 } ; 2、后台命令管理链表的结构,用于 jobs 指令的后台储存。 typedef struct BACK_JOBS { pid_t pid;//记录进程名的pid char *cmd; int status;//三种状态 0为DONE 1为RUNNING 2为STOPPED } BACK_JOB; 3、History命令需要的数据的链表节点结构 typedef struct Node { int id; char cmd[100]; //储存每条打过的命令 struct Node *next; } NODE; 4、s hell 基...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Linux简单的shell实现(附源代码)

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部