exevp пропускает весь код до ожидания вызова в c
Я пытаюсь выполнить файл, используя fork
а также execvp
Однако я сталкиваюсь с некоторыми ошибками. Я не нашел каких-либо решений для проблемы, с которой я сталкиваюсь здесь в Интернете, так как я не получаю никаких ошибок от моего exevp, и он не работает. Вот мой код:
pid_t child;
int status;
child = fork();
char *arg[3] = {"test","/home/ameya/Documents/computer_science/cs170/project1", (char*) 0};
if(child == 0){
printf("IN CHILD BEFORE EXECVP\n");
int value = execvp(arg[0],arg);
if(value < 0){
printf("ERROR\n");
}else{
printf("In Child : %i\n", value);
}
}
if(waitpid(child, &status, 0) != child){
printf("ERROR IN PROCESS\n");
}
printf("In Parent\n");
Когда я пытаюсь запустить этот код, он выводит только "IN CHILD BEFORE EXCEPTION" и "IN PARENT", но не выводит ни одного оператора printf между тем, почему он это делает. Файл, который я пытаюсь запустить простой исполняемый файл, который печатает "привет мир" на стандартный вывод.
Спасибо за любую помощь
1 ответ
Со страницы руководства:
Функции exec() возвращаются, только если произошла ошибка.
Так что ваши execvp
Вызов предположительно работает, и, следовательно, он не возвращается.
Суть exec
Функция заключается в том, что они заменяют текущий выполняемый код кодом другой программы, поэтому не имеет смысла возвращаться к вашему коду после завершения работы программы.
Редактировать:
Похоже, вы неправильно вызываете свою программу. Я думаю, вы должны называть это так:
char *arg[3] = {"test", (char*) 0};
int value = execvp("/home/ameya/Documents/computer_science/cs170/project1/test", arg);