在fork()命令之后创建管道时会发生什么?

时间:2018-03-27 19:00:55

标签: c

那么你有两个管道吗?当父进程将某些内容写入管道时,子进程可以读取它吗?

如果在fork之前创建管道会有什么区别?

当我尝试它时,它只是搞砸了我的数据,我想从孩子转移到父母,我得到一些狡猾的符号而不是整数。

1 个答案:

答案 0 :(得分:6)

如果在fork()之后创建管道,在子进程和父进程中,您有两个管道 - 一个在子级中,另一个在父级中。每个流程都拥有各自管道的两端。两个管道都没有连接到子进程和父进程,并且这两个进程都不能通过它拥有的管道与另一个进程通信。

如果在fork()之前创建管道,则有一个管道,每个进程(父进程和子进程)将有一个文件描述符引用管道的每一端(因为子进程自然地继承了文件描述符)的父母)。在这种情况下,进程可以通过写入/读取管道的备用端进行通信。

通常的做法是,如果要创建管道以在子进程和父进程之间进行通信,则在fork之前创建管道,并在每个进程中关闭管道的一个(不同的)末端。由于管道通常是单向的,因此允许进程之间的单向通信。如果你想要双向通信,你可以使用套接字(通过socketpair),或者创建两个管道(在分叉之前)。