shell建立一个新进程,然后在那个进程中运行ls程序并等待那个进程结束
循环以下过程:
1.获取命令行
2.解析命令行
3.建立一个子进程(fork)
4.替换子进程(execvp)
5.父进程等待子进程退出
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<wait.h>
int main()
{
int i=0;
char *myargv[NUM];
char cmd[MAX];
while(1)
{
printf("[bit@localhost myshell]#");
fgets(cmd,sizeof(cmd),stdin);
cmd[strlen(cmd)-1]='\0';
myargv[i++]=strtok(cmd," ");
char *ret=NULL;
while(ret=strtok(NULL," ")){
myargv[i++]=ret;
}
myargv[i]=NULL;
pid_t id=fork();
if(id==0)
{
execvp(myargv[0],myargv);
exit(1);
}
else
{
waitpid(id,NULL,0);
}
}
int j=0;
for(j=0;j<i;j++)
{
printf("%s\n",myargv[j]);
}
return 0;
}