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

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

本文关键字:通信 管道 子程序 启动 程序 分支      更新时间:2023-10-16

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

例如,我认为这个指南很好,但没有显示我必须在与exec一起启动的程序中做些什么,以便在两个程序之间进行通信,我必须在"父"中使用dup()来共享描述符,但是我在子端正确引用管道来建立两者之间的通信?:http://tldp.org/LDP/lpg/node11.html

在本文中,子进程使用dupdup2 (dup2更好)来设置一个文件描述符作为标准输入。
这个过程与标准输出类似(您需要一个单独的pipe和相关的文件描述符)。

父进程可以通过在管道的末端读写来与子进程的工作室通信。

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

换句话说,如果像本文中那样使用dup/dup2设置文件描述符,则不需要在exec编辑过程中做任何特殊操作,只需在stdio上读写即可。