实验一实现带参数简单shell

实验一实现带参数简单shell

ID:24048226

大小:147.50 KB

页数:3页

时间:2018-11-12

实验一实现带参数简单shell_第1页
实验一实现带参数简单shell_第2页
实验一实现带参数简单shell_第3页
资源描述:

《实验一实现带参数简单shell》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一实现带参数的简单shell实验要求:利用课本第9页程序1-5的框架,实现允许输入命令带参数的简单shell。原来的实现是不能够带参数的。输入命令所能带的参数个数,只受到系统键盘输入缓冲区长度(以及shell输入缓冲区长度)的限制,该缓冲区的缺省长度是4096个字节。实现时要解决的主要问题有:1、正确理解并使用系统调用fork(),execve()和waitpid(),特别是execve()函数。2、根据简单shell的输入,构造execve函数的参数。设计思路:execve函数原型:intexecve(constchar*path,constchar*a

2、rgv[],constchar*envp[]);其中:path:要执行的程序路径名,比如“/bin/ls”,“cd”,“/usr/bin/gcc”等等。argv:参数表,比如ls命令中可带的命令行参数-l,-a等。注意,argv的第一个元素必须是要执行的程序(命令)的路径名。envp:环境变量表,供要执行的命令使用。实参数用NULL或系统环境变量environ。因此构建二维数组str[10][10],输入的指令以空格为分隔标志,分别将字符串存入str[i++];最后将str[0]赋给path,str[i]赋给argv[i],运行execve函数即可。详细代码:

3、intmain(void){charbuf[MAXLINE];/*fromapue.h*/char*envp[]={"",NULL};char*argv[]={NULL};charstr[10][10];inti,j,k;pid_tpid;intstatus;printf("%%");/*printprompt(printfrequires%%toprint%)*/while(fgets(buf,MAXLINE,stdin)!=NULL){if(buf[strlen(buf)-1]=='')buf[strlen(buf)-1]=0;/*replacenew

4、linewithnull*/i=j=k=0;while(buf[j]!=''){if(buf[j]!=''){for(i=j;buf[i]!=''&&buf[j]!='';i++)str[k][i-j]=buf[i];str[k][i-j]='';k++;j=i;}elsej++;}for(i=0;i

5、err_ret("couldn'texecute:%s",argv[0]);exit(127);}/*parent*/if((pid=waitpid(pid,&status,0))<0)err_sys("waitpiderror");printf("%%");}exit(0);}运行结果:心得体会:初次接触UNIX环境编程,通过学习相关指令,已经能够进行UNIX下的基本操作,有种学习计算机的优越感。每次实验内容不仅提高了我们的编程能力,而且提高了我们解决问题的能力。完成人姓名:魏陈强学号:23020092204168谢思发学号:23020092204174完成

6、时间:2011年10月12号。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。