Execvp 只正确运行第一个命令

Execvp Only runs the first command correctly

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

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

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

int tokenIndex=0;
do {

应该是

int tokenIndex;
do {
  tokenIndex=0;

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

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