Execvp Only仅正确运行第一个命令

时间:2016-10-13 19:31:40

标签: c++ c linux shell execvp

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

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

1 个答案:

答案 0 :(得分:1)

代码中的问题是在命令启动之间不将参数计数器重置为0.

int tokenIndex=0;
do {

应该是

int tokenIndex;
do {
  tokenIndex=0;

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

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