Я пытаюсь создать подобный оболочке код 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
печатает все нижеуказанные команды и выводит дважды.
Это как-то связано с perror в этом случае не существующей команды? Это работает для существующей команды с недопустимыми аргументами.
Спасибо!