我正在尝试创建类似shell的c代码。它逐行读取给定文件,将其分解为命令令牌,创建argv,然后运行execvp。但是,有一个问题。每当我输入无效命令时,它都会打印以下所有命令,并且输出两次。
例如,如果已写
catdf
echo one
echo onetwo
它打印出来
catdf: No such file or directory
echo one
one
echo onetwo
onetwo
echo one
one
echo onetwo
onetwo
这不是我想要的。 (我希望每个命令行和输出仅打印一次)
我认为是错误原因的是fork。
叉后,我在孩子里用过
execvp(argv[0], argv);
perror(argv[0]);
exit(EXIT_FAILURE);
在父母中,我用过
while ((iPid=wait(&status))>0){
if (status!=0)
break; /*for current command line*/
}
此代码对于诸如以下的错误效果很好
cat nonexistingfile
但是
nonexistingcommand
打印以下所有命令并输出两次。
在不存在命令的情况下,它与恐怖有关吗?它适用于带有无效参数的现有命令。
谢谢!