做一个简易的shell

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;     
}           

猜你喜欢

转载自blog.csdn.net/weixin_42365095/article/details/83002479