c文件改成迭代服务器怎么改,在C shell程序中从system()更改为execvp()

我正在编写一个简单的C shell。用户input命令,它们存储在一个二维数组中,例如:

SHELL$ ls ; date ; ls // This is parsed into the following char* commands[1000] = {"ls", "date", "ls"};

我有一个循环,将数组的每个元素传递给系统,如果在我的程序中,我没有特定的angular色input – 我没有具体的angular色ls和date:

if (did_not_process == 0) system(commands[i]);

现在我想要将system()转换为execvp()并且具有相同的EXACTfunction。 这是我的方法,没有适当的function:

if (did_not_process == 0) { command[0] = commands[i]; command[1] = NULL; if (fork() == 0) { execvp(command[0], command); } else { wait(NULL); //wait for child to complete? } }

唯一的问题是我经历了shell的进一步迭代(一个简单的while循环),它偶尔和不可控地打印执行。 问题在于我已经显示的代码中的某处,但我无法弄清楚在哪里。

这里是输出示例:

SHELL$ ls;date;ls file Mon Jul 16 13:42:13 EDT 2012 file SHELL$ ls SHELL$ file

第一次运行,然后在shellinput的同一行打印文件。

就一般原则而言,您应该检查系统调用的错误返回值:

int cpid = fork() if (cpid == -1) { perror("fork"); } else if (cpid == 0) { execvp(command[0], command); perror("execvp"); _exit(1); } else { if (waitpid(cpid, 0, 0) < 0) perror("waitpid"); }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值