我使用fork
和execvp
创建了一个简单的shell。当我运行我的程序并输入像ls
或ls -l
这样的命令时,它就像我喜欢的那样。完成后我的程序就坐在那里等待另一个命令,但是当我输入另一个有效的命令或甚至输入相同的命令时。 execvp
正在说ls: cannot access 'ls': no such file or directory
。我不知道为什么会这样。我再次运行程序得到相同的结果。
这是我的代码。我无法通过我的虚拟机复制它,所以我拍了一张照片。(如果有人想编辑这样的格式,那就太棒了。我试着看看帮助)
答案 0 :(得分:1)
代码中的问题是在命令启动之间不将参数计数器重置为0.
int tokenIndex=0;
do {
应该是
int tokenIndex;
do {
tokenIndex=0;
第一次有效,但第二次传递ls
作为ls
的参数,因此消息
(尝试在shell中输入ls ls
,您将获得完全相同的消息)。