模拟shell ( 进程函数:fork(),execvp(),wait() )

      shell是一个管理进程和运行进程的程序,下面我们就通过模拟一个shell程序这个实例来更好地认识认识在Linux/Unix系统中,进程的创建和结束,以及父子进程之间的一些关系。接下来先贴上源代码的中命令的读取部分:

  numargs=0;
  while(numargs<MAXARGS){
   printf("Arg[%d]?",numargs);
   if(fgets(argbuf,ARGLEN,stdin)&&*argbuf!='\n')
     arglist[numargs++]=makestring(argbuf);
   else{
    if(numargs>0){
      arglist[numargs]=NULL;
      execute(arglist);
      numargs=0;
    }
   }
  }

       这一段代码用于读取用户输入的命令,保存在arglist这个字符指针的数组中。因为进程间的通信的参数类型为字符串,所以我们选择指向字符串的指针构成的数组作为传递的参数,并且注意要将最后一个指针置NULL。当命令读取完毕完毕之后,即调用execute函数并且将arglist数组传递给它,进行关于子进程的一些操作。接下来,我们来看看execute函数具体的实现情况。

execute(char *arglist[]){
  int pid,exitstatus;

  pid=fork();//创建子进程
  switch(pid){
   case -1:
     perror("fork failed");
     exit(1);
   case 0:
     exec
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值