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);
Другие вопросы по тегам