#c #exec #fork
#c #exec #fork
Вопрос:
Я использую C и пытаюсь запустить команду оболочки во внешнем процессе. Вот код, который у меня есть до сих пор:
pid_t pid;
pid = fork();
if(pid == 0){
execv(args[0],args);
} else {
wait();
}
Моя первая проблема заключается в том, что мне нужно получить вывод из команды оболочки, переданной exec, и я не знаю, как это сделать. После выполнения приведенного выше кода основная программа также дублирует себя, и я не уверен, почему.
Комментарии:
1. Вы также должны обработать случай, когда
pid == -1
. Даже если просто напечатать сообщение об ошибке и выйти.2. У вас должно быть
exit(1);
и, вероятно, печатное сообщение послеexecv()
. Вероятно, ваше «дублирует себя» происходит потомуargv[0]
, что is"ls"
, а не"/bin/ls"
иexecv()
не выполняет поиск с использованием PATH . Следовательно,execv()
сбой завершается, и дочерний элемент продолжает выполнять более или менее то, что сделал бы родитель.
Ответ №1:
args[0]
предположительно, это имя запущенной программы, поэтому она будет разветвляться, а затем сама исполняется.
Чтобы собрать выходные данные, вам нужно будет организовать их явную передачу. Для pipe()
этого часто используется вызов Unix.
Комментарии:
1. аргументы [0] не являются именем запущенной программы. В моем примере программы это ‘ls’