分叉子程序中要求与启动器程序进行管道通信

Requirements in forked child programs to have a pipe communication with the launcher program

假设我有一个名为 "parent" 的程序,它使用 fork() 和 execl() 启动另一个名为 "child" 的程序,我想保持这两个程序之间的通信。保持这种通信的最佳方式似乎是使用无名管道。在 "parent" 程序端很容易找到有关要求的文档和示例,但我在 "child" 端找不到相同的文档和示例。

例如,我认为本指南很好,但没有显示我在使用 exec 启动的程序中必须做什么才能在两个程序之间进行通信,我必须在 "parent" 共享描述符,但我确实在子端正确引用管道以在两者之间建立通信?: http://tldp.org/LDP/lpg/node11.html

文章中,子进程使用dupdup2dup2更好)将其中一个文件描述符设置为标准输入。
该过程与标准输出类似(您需要单独的 pipe 和关联的文件描述符)。

然后,父项可以通过读取和写入其管道末端来与子项的 stdio 通信。

当子进程被 execed 时,这些文件描述符被继承,因此相同的管道端点将在子进程中保持标准输入和输出。

换句话说,如果您像文章中那样使用 dup/dup2 设置文件描述符,则无需在 execed 中执行任何特殊操作process,你可以直接在stdio上读写。