shell的简单实现.docVIP

  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文档。上传文档
查看更多
shell的简单实现

实验三 shell的简单实现 实验目的 学习如何编写一个Unix Shell程序,使得有机会了解如何创建子进程来执行一项专门的工作以及父进程如何继续进行子进程的工作。熟悉进程概念,了解fork,execve,wait等系统调用。本实验的目的主要在于学会如何在Unix系统下创建进程和管理进程。 实验类型 综合性实验 预习要求 完成第三章进程的学习,了解进程的基本概念及进程的创建与管理。 实验设备与环境 PII以上电脑一台, 已安装Linux操作系统, VC++、GCC或其他C语言编译环境 实验原理 操作系统控制整个硬件与管理系统的活动监测,它不能被用户随意操作,若用户使用不当,可能会造成整个系统崩溃。但我们总是需要让用户操作系统的,这样就有了在操作系统上发展应用程序。用户可以通过应用程序来指挥内核,让内核来完成任务。在整个操作系统中,应用程序在最外层,就如同鸡蛋的外壳一样,这就是shell的由来。 在实现过程中,首先解析用户提交的命令行,通过fork()系统调用产生一进程,调用execvp()函数来完成命令所要求的操作。使用信号(signals)来通知进程事件的发生,并调用信号处理函数来完成处理工作。 实验任务 编写一个C语言程序作为Linux内核的Shell命令行解释程序,实现以下功能: (1)解析用户提交的命令行;按照环境变量有哪些信誉好的足球投注网站目录系统;执行命令。 (2)提供ls、mkdir rmdir、pwd、ps等内部命令。 (3)提供历史查询功能。如用户按下Ctr1+C,信号处理器将输出最近的10个命令列表。 实验步骤和方法 setup()函数读取用户的下一条命令(最多80个字符),然后将之分析为独立的标记,这些标记被用来填充命令的参数向量(如果将要在后台运行命令,它将以“”结尾,setup()将会更新参数background,以使main()函数相应地执行)。当用户按快捷键Ctrl+D后,setup()调用exit(),此程序将被终止。 main()函数打印提示符COMMAND- ,然后调用setup() ,它等待用户输入命令。用户输入命令的内容被装入一个args 数组。例如,如果用户在COMMAND- 提示符处输入ls -1 , args[0]等同于字符串ls 和args[1 ]被设置为字符串 –l (这里的字符串指的是以0结束的C字符串变量)。 #include stdio.h #include unistd.h #define MAX LINE 80 void setup(char inputBuffer[], char *args[],int *background) { //用于解析命令行的 } int main(void) { char inputBuffer[MAXLINE]; /* buffer to hold command entered */ int background; /* equals I if a command is followed by , */ char *args[MAXLINE/2 + I]; /* command line arguments */ while(l) { background = 0; printf( COMMAND-); /* setup() calls exit() when Control-D is entered */ setup(inputBuffer,,args, background); /* the steps are: (1) fork a child process using fork() (2) the child process will invoke execvp() (3) if background = 1,the parent will wait, otherwise it will invoke the setup() function again. */ } } 创建子进程 修改main()函数,以使从setup()返回时,创建一个子进程,并执行用户的命令。如前面所指出的,setup()函数用用户指定命令装载args 数组的内容,args 数组将被传递给execvp()函数,该函数具有如下接口: execvp(char *command, char *params[]); 其中command表示要执行的命令,params保存命令的参数。对于该项目,execvp()函数应作为execvp(args[0],args)来调用;需要保证检测background的值,以决定父进程是否需要等待子进程退出。 创建历史特性 信号处理函数应在main()之前声明,并且由于控制可在任意点传递给该函数,没有参

文档评论(0)

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

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

1亿VIP精品文档

相关文档