c++ - fork 子程序中要求与启动器程序进行管道通信

标签 c++ linux pipe fork dup

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

例如,我认为本指南很好,但没有说明我在使用 exec 启动的程序中必须做什么才能在两个程序之间进行通信,我必须在“父级”中使用 dup() 来共享描述符,但我是谁在子端正确引用管道以在两者之间建立通信?: http://tldp.org/LDP/lpg/node11.html

最佳答案

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

然后, parent 可以通过读取和写入管道的末端来与 child 的 stdio 通信。

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

换句话说,如果您像文章中那样使用 dup/dup2 设置文件描述符,则无需在 execed 进程,你可以直接在 stdio 上读写。

关于c++ - fork 子程序中要求与启动器程序进行管道通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39750153/

相关文章:

c - 音频输出有问题,没有欠载

linux - 在 linux 中不使用 "cat"命令读取大文件的内容

c++ - 模板转换运算符问题

linux - 在 mint 上安装 emacs 24.4 错误

c++ - 如何从带符号的零中去掉减号

linux - Linux 中的管道运算符

bash - 疏水阀在管道输送时是否按预期工作?

C 如何使用 exec 函数和管道获取其他程序的结果

c++ - 与C++和汇编相关,什么是ebp+8?

c++ - VS2015 和 GCC 5.4.0 中的 Constexpr 阶乘编译结果