Когда дочерний процесс вызывает функцию потерял вывод - PullRequest
0 голосов
/ 11 октября 2010
int handleCommand(char *command) {
    pid_t pid;
    pid = fork();

    if (pid > 0) {
        sleep(0.5);
    } else if (pid == 0) {
        execCommand(command);
        //strcat(path[0], command);
        //printf("%s", path[0]);
        //execve(path[0], path, NULL);
        //printf("\n");
    } else {
        printf("ERROR");
    }

}

int execCommand(char *command) {

    char* path[] = {"/bin/", NULL};
    printf("in execCommand > %s", command );
    strcat(path[0], command);
    execve(path[0], path, NULL);
    printf("\n");
}

сначала, как вы можете видеть, я поместил код непосредственно в функцию, в которой происходит форк.Это будет отображать вывод, ожидаемый при выполнении команды ls, например.Но когда я переместил это в функцию, я больше не вижу никакого вывода.

1 Ответ

1 голос
/ 11 октября 2010

Первое замечание: операции printf() после execve() никогда не выполняются, если команда выполняется - execve() возвращает только при ошибке, но не при успехе.

Далее, если только вы не добавили новую строкув конце вывода печать не будет сброшена на терминал, который является стандартным выводом (и существуют обстоятельства, такие как передача стандартного вывода в другую программу, когда даже символ новой строки не обязательно достаточен для сброса стандартного вывода),Таким образом, вы должны включить новую строку в сообщение, и все равно делать fflush(stdout); до execve().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...