繁体   English   中英

在fork()命令之后创建管道时,究竟发生了什么?

[英]What exactly happens when you create a pipe after a fork() command?

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

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

当我尝试它时,它只是弄乱了我的数据,我想将其从子级转移到父级,并且得到了一些疯狂的符号,而不是整数。

如果在子进程和父进程中的fork()之后创建管道,则将有两个管道-一个在子进程中,一个在父进程中。 每个进程都拥有其各自管道的两端。 子进程和父进程均未连接任何管道,并且两个进程都无法通过其拥有的管道与另一个进程进行通信。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM