c++ - Execvp 仅正确运行第一个命令

标签 c++ c linux shell execvp

我正在使用 fork 制作一个简单的 shell和execvp 。当我运行程序并输入类似 ls 的命令时或ls -l它的工作方式正是我喜欢的。当完成后,我的程序坐在那里等待另一个命令,但是当我输入另一个有效命令,甚至输入相同的命令时。 execvp是说ls: cannot access 'ls': no such file or directory 。我不知道为什么会发生这种情况。我再次运行该程序得到相同的结果。 这是我的代码。我无法通过虚拟机复制它,所以我拍了一张照片。(如果有人想编辑它的格式,那就太棒了。我尝试查看帮助)

http://imgur.com/a/6ZhKP

最佳答案

代码中的问题是您没有在命令启动之间将参数计数器重置为 0。

int tokenIndex=0;
do {

应该是

int tokenIndex;
do {
  tokenIndex=0;

第一次它有效,但第二次你将 ls 作为 ls 的参数传递,因此出现消息

(尝试在 shell 中输入 ls ls,您将得到完全相同的消息)。

关于c++ - Execvp 仅正确运行第一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029422/

相关文章:

c++ - 在寄存器上加载 double 浮点值时出错?

c++ - 使用 libpcap 自动执行 TCP 连接

c - 对 C 中字符串数组的最后一列进行排序

r - 在本地构建和安装 JAGS

c - C语言中如何过滤类似于 `int c = 1/0*0`的表达式?

su'ing到不同用户后的linux和音频

c++ - 指向特定的继承

c++ - 多线程和内存

c# - 如何使用 ffmpeg 进行视频到图像的转换?

c - 为什么我不能在 C 中使用 `&&a`?