Я делаю простую оболочку, используя fork
а также 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
отсюда сообщение
(попробуйте ввести ls ls
в оболочке вы получите точно такое же сообщение).
Других решений пока нет …