Я использую подпрограмму с именем read_from_pipe
в моем процессе child
, как показано ниже, чтобы прочитать все, что находится в канале, и отобразить его:
void read_from_pipe(int fileDescriptr)
{
FILE *stream;
int c;
if (fileDesc_Is_Valid(fileDescriptr) == TRUE)
{
stream = fdopen(fileDescriptr, "r");
while ((c = fgetc(stream)) != EOF)
putchar(c);
fclose(stream);
}
else
perror("Reading from pipe failed -->");
}
fileDesc_Is_Valid
— еще одна подпрограмма, проверяющая наличие файлового дескриптора.
Проблема в том, что, поскольку я использовал оператор waitpid(pid, &status, 0);
в своем parent
, чтобы дождаться, пока child
завершит свои задачи, компилятор застревает в первом холодном запуске в цикле while
, когда канал фактически пуст. Как я могу AND
добавить еще одно условие в while
, чтобы компилятор просто игнорировал пустые каналы?
SIGPIPE
и руководства по обработке (или игнорированию) сигналов. - person Some programmer dude   schedule 14.10.2015signalfd()
+poll()
(или аналогичный) - person Valeri Atamaniouk   schedule 14.10.2015