父母和孩子是不是需要关闭管道的另一端?
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 杀死(因为还有一个读者:它自己)。
【讨论】:
以上是关于父母和孩子是不是需要关闭管道的另一端?的主要内容,如果未能解决你的问题,请参考以下文章