我正在使用 fork
制作一个简单的 shell和execvp
。当我运行程序并输入类似 ls
的命令时或ls -l
它的工作方式正是我喜欢的。当完成后,我的程序坐在那里等待另一个命令,但是当我输入另一个有效命令,甚至输入相同的命令时。 execvp
是说ls: cannot access 'ls': no such file or directory
。我不知道为什么会发生这种情况。我再次运行该程序得到相同的结果。
这是我的代码。我无法通过虚拟机复制它,所以我拍了一张照片。(如果有人想编辑它的格式,那就太棒了。我尝试查看帮助)
最佳答案
代码中的问题是您没有在命令启动之间将参数计数器重置为 0。
int tokenIndex=0;
do {
应该是
int tokenIndex;
do {
tokenIndex=0;
第一次它有效,但第二次你将 ls
作为 ls
的参数传递,因此出现消息
(尝试在 shell 中输入 ls ls
,您将得到完全相同的消息)。
关于c++ - Execvp 仅正确运行第一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029422/