父母和孩子是不是需要关闭管道的另一端?

Posted

技术标签:

【中文标题】父母和孩子是不是需要关闭管道的另一端?【英文标题】:Is it necessary to close the opposite ends of a pipe in parent and child?父母和孩子是否需要关闭管道的另一端? 【发布时间】:2013-09-24 01:55:02 【问题描述】:

以下是generalpipe()用法示例:

int fd[2];
pipe(fd);

if((childpid = fork()) == -1)

        perror("fork");
        exit(1);


if(childpid == 0)

        /* Child process closes up input side of pipe */
        close(fd[0]);

        ////.....some code....////
        exit(0);

else

        /* Parent process closes up output side of pipe */
        close(fd[1]);

        ////.....some code....////

我想知道的是是否调用子进程中的close(fd[0])和父进程中的close(fd[1])是必要的

如果我不使用会发生什么 close() 他们只在子级中使用 fd[1] 而在父级中使用 fd[0]

它是否关闭只是为了让我们不小心对这些描述符做某事

【问题讨论】:

【参考方案1】:

如果两个进程都打开了管道的两端,如果一个死了,另一个将死锁,而不是在读取时检测到 EOF(因为仍然有一个 writer: 本身)或在写入时被 SIGPIPE 杀死(因为还有一个读者:它自己)。

【讨论】:

以上是关于父母和孩子是不是需要关闭管道的另一端?的主要内容,如果未能解决你的问题,请参考以下文章

c - 使用管道在两个子进程之间持续通信

Apache 不会在新的 Xampp 安装上启动:管道已结束。孩子:无法从父母那里读取套接字数据

如何等待命名管道的另一端打开?

perl:一个父母,许多孩子 - 父母中有一个管道阅读器?

XPath:如何从一个孩子导航到同一个父母的另一个孩子

如何重新打开已关闭的文件描述符