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

Qic*_*mbu 2 c

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

如果在fork之前创建管道会有什么不同?

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

dav*_*mac 6

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

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

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