Я пытаюсь решить проблему, возникшую у меня, когда дочерний процесс запускает execvp () и должен сообщить родителю, если он вернется. Итак, после того, как execvp () вернется (потому что произошла ошибка), как я могу сообщить родителю, что это конкретное событие произошло, чтобы он мог его обработать.
Есть один метод написания строки текста через канал, который я использую, и затем чтение этого из родительского ... но это кажется немного неаккуратным. Есть ли лучший способ?
Спасибо!
Редактировать: Вот какой-то код, который я пытаюсь выполнить, и мне кажется, что я не могу вернуть чтение.
int errorPipe[2];
signal( SIGPIPE, SIG_IGN );
int oldflags = fcntl (errorPipe[0], F_GETFD, 0);
oldflags |= FD_CLOEXEC;
fcntl (errorPipe[0], F_SETFD, oldflags);
oldflags = fcntl (errorPipe[1], F_GETFD, 0);
oldflags |= FD_CLOEXEC;
fcntl (errorPipe[1], F_SETFD, oldflags);
pipe( errorPipe );
// in the child..
char *error_message = "exec failed";
write( errorPipe[1], error_message, strlen(error_message)+1 );
exit(-1);
// in the parent
printf("read gives: %d\n", read(errorPipe[0], error_read, MAX_LINE_LENGTH) );