我在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
完成其任务,所以编译器在{{{{管道实际为空时循环1}}。我如何while
AND
中的另一个条件让编译器只是忽略空管?
答案 0 :(得分:0)
实际上非常简单,您只需要忽略!important
信号,并通过单个函数调用完成:
SIGPIPE
当管道为空时,不是提出signal(SIGPIPE, SIG_IGN);
信号,而是从管道读取将返回文件结束值(基础SIGPIPE
系统调用将返回{{1} })。