分叉子程序中要求与启动器程序进行管道通信
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
文章中,子进程使用dup
和dup2
(dup2
更好)将其中一个文件描述符设置为标准输入。
该过程与标准输出类似(您需要单独的 pipe
和关联的文件描述符)。
然后,父项可以通过读取和写入其管道末端来与子项的 stdio 通信。
当子进程被 exec
ed 时,这些文件描述符被继承,因此相同的管道端点将在子进程中保持标准输入和输出。
换句话说,如果您像文章中那样使用 dup
/dup2
设置文件描述符,则无需在 exec
ed 中执行任何特殊操作process,你可以直接在stdio上读写。
假设我有一个名为 "parent" 的程序,它使用 fork() 和 execl() 启动另一个名为 "child" 的程序,我想保持这两个程序之间的通信。保持这种通信的最佳方式似乎是使用无名管道。在 "parent" 程序端很容易找到有关要求的文档和示例,但我在 "child" 端找不到相同的文档和示例。
例如,我认为本指南很好,但没有显示我在使用 exec 启动的程序中必须做什么才能在两个程序之间进行通信,我必须在 "parent" 共享描述符,但我确实在子端正确引用管道以在两者之间建立通信?: http://tldp.org/LDP/lpg/node11.html
文章中,子进程使用dup
和dup2
(dup2
更好)将其中一个文件描述符设置为标准输入。
该过程与标准输出类似(您需要单独的 pipe
和关联的文件描述符)。
然后,父项可以通过读取和写入其管道末端来与子项的 stdio 通信。
当子进程被 exec
ed 时,这些文件描述符被继承,因此相同的管道端点将在子进程中保持标准输入和输出。
换句话说,如果您像文章中那样使用 dup
/dup2
设置文件描述符,则无需在 exec
ed 中执行任何特殊操作process,你可以直接在stdio上读写。