- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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--;//命令数减一
您可能关注的文档
最近下载
- 论龟兹乐舞对中原乐舞的影响及作用.doc VIP
- CCT-D-CUF斯频德闭式冷却塔样本.pdf VIP
- 比较敦煌与龟兹壁画中舞蹈艺术的空间性和动作语言特征.docx VIP
- 2025福建福州市马尾区民政局招聘社会救助协管员2人笔试模拟试题及答案解析.docx VIP
- 2025福建福州市马尾区民政局招聘社会救助协管员2人考试备考题库及答案解析.docx VIP
- 2025福建福州市马尾区民政局招聘社会救助协管员2人笔试参考题库附答案解析.docx VIP
- 2025福建福州市马尾区民政局招聘社会救助协管员2人笔试备考题库及答案解析.docx VIP
- FuTURE论坛:2020 5G毫米波技术白皮书.pdf VIP
- 私法中的人_11309198.pdf VIP
- 龟兹壁画中的乐舞研究.pdf VIP
文档评论(0)