如何在CHILD过程中忽略空管?

时间:2015-10-14 10:52:52

标签: c pipe fdopen

我在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中的另一个条件让编译器只是忽略空管?

1 个答案:

答案 0 :(得分:0)

实际上非常简单,您只需要忽略!important信号,并通过单个函数调用完成:

SIGPIPE

当管道为空时,不是提出signal(SIGPIPE, SIG_IGN); 信号,而是从管道读取将返回文件结束值(基础SIGPIPE系统调用将返回{{1} })。