2

下面是一个通用的 pipe() 用法示例:

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]父母身上使用会发生什么。

它是否关闭只是为了让我们不小心不使用这些描述符?

4

1 回答 1

3

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

于 2013-09-24T06:11:35.253 回答