【发布时间】:2015-10-14 10:52:52
【问题描述】:
我在我的child 进程中使用了一个名为read_from_pipe 的子例程,如下所示来读取管道中的任何内容并显示它:
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 是另一个检查文件描述符是否存在的子程序。
问题在于,因为我在 parent 中使用了 waitpid(pid, &status, 0); 语句来等待 child 完成其任务,所以当管道实际上是管道时,编译器会卡在 while 循环的第一次冷运行中空的。我如何AND 我的while 中的另一个条件让编译器简单地忽略空管道?
【问题讨论】:
-
搜索
SIGPIPE,以及如何处理(或忽略)信号的教程。 -
@JoachimPileborg 嗯……这听起来比我最初想象的要复杂。这是我唯一的选择吗?
-
不,你可以使用
signalfd()+poll()(或类似的)