gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:08:17 32 4
gpt4 key购买 nike

那么你有两个管道吗?而当父进程往管道里写东西时,子进程能读到吗?

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

当我尝试它时,它只是弄乱了我想要从 child 转移到 parent 的数据,我得到了一些疯狂的符号而不是整数。

最佳答案

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

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

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

关于c - 在 fork() 命令之后创建管道时究竟会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520567/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com