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