《系统软件课程设计操作系统》实验报告.docVIP

《系统软件课程设计操作系统》实验报告.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《系统软件课程设计操作系统》实验报告.doc

《系统软件课程设计》 实验报告 华东理工大学信息科学与工程学院 一.课程设计题目 Shell编程 二.课程设计成员 胡伟强 计121 三.课程设计内容和要求 学习如何编写一个Linux的外壳——Shell,即命令解释程序。学习怎样接受命令、解释命令、执行命令,特别是采用创建子进程的方式来执行一个程序,以及父进程如何继续子进程的工作。? 要求: 1、编写一个C语言程序作为Linux内核的shell命令行解释程序,所执行的结果需和系统命令行方式保持一致。 2、对用户编写的shell增加后台运行功能。即用户可以使用””作为一个命令结束,以启动下一个命令。 3、修改程序,增加I/O重定向功能。即用户可以使用””、””和”|”符号改变程序/文件的输入和输出。 四. 软件系统设计 1、函数调用图: 函数功能说明: 函数名 功能说明 void execute(void) 执行函数,程序的主体 Void child_process_handler(int sig) 处理后台运行进程函数,用于清除后台运行的子进程,以防其变成僵尸进程 void terminal_prompt(char*) 终端提示符函数 int read_command(char **,char **,char*) 读取命令函数,从用户输入中读取命令和参数,分别放入command[]和parameters[][]中,作为exec族函数执行。 int parsing(char **,int,struct parse_info *) 语法分析函数,主要处理后台执行,重定向,管道功能实现 int parse_info_init(struct parse_info *info) 初始化结构体struct parse_info *info int builtin_command(char *command, char **parameters) 内建命令函数,实现了exit、cd、help命令 算法设计 程序框架 #define TRUE 1 while(TRUE) {                  type_prompt();                  read_command(command,parameters);      if(fork()!=0) {                  /* Parent code */     waitpid(-1,status,0);          } else {     /* Child code */     execve(command,parameters,0);   } } 2.程序主体功能execute()函数的实现 #include myshell.h void execute(void) { int status,i; char *command = NULL;//命令 char **parameters;//参数 int ParaNum;//参数个数 char prompt[MAX_PROMPT];//提示 struct parse_info info; pid_t ChdPid,ChdPid2; parameters = malloc(sizeof(char *)*(MAXARG+2)); buffer = malloc(sizeof(char) * MAXLINE); if(parameters == NULL || buffer == NULL)//内存分配失败 { printf(mysh error:malloc failed.\n); return; } if(signal(SIGCHLD,child_process_handler) == SIG_ERR)//父进程调用将SIGCHLD绑定到sig_handler()函数,这样fork出来的子进程在终止时会自动清理掉 perror(signal() error); while(TRUE) { int pipe_fd[2],in_fd,out_fd; terminal_prompt(prompt);//终端提示符函数 ParaNum = read_command(command,parameters,prompt);//读入命令 if(-1 == ParaNum) continue; ParaNum--;//命令数减一

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档