进程(番外):自定义shell命令行解释器

---------------------加油! 


 本篇的理论较少,当然代码量也很少就仅仅是上传的代码而已。

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<string.h>


#define MAX_ORDER 1024
#define MAX_LINE 32

int main()
{
  //命令 输入
  char cmd[MAX_ORDER];
  char* line[MAX_LINE]; //指令参数 拆开
  //shell 脚本是一直运行的状态
  while(1)
  {
     printf("\n[WGzZs@VM-4-11-centos my_shell]# ");
     fgets(cmd,MAX_ORDER,stdin); //读取
     cmd[strlen(cmd)-1]='\0'; //解决\n
      //printf("%s\n",cmd);
     line[0]=strtok(cmd," ");
     int i=1;
     while(line[i]=strtok(NULL," ")){
       i++;
     }

     //创建子进程 进行调用
     pid_t id=fork();
     if( id == 0 )
     {
        //child  进行执行
        execvp(line[0],line);
        //    执行谁   怎样执行
     }

    int status=0;  
     pid_t ret=waitpid(id,&status,0); //此时父进程只需要等就行了
     if(ret >0)
     {
       printf("exit code:%d\n",WEXITSTATUS(status));
     }
  }

  return 0;
}

 

最终代码就段落。

祝你好运~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值