分支子程序中与启动程序进行管道通信的要求
Requirements in forked child programs to have a pipe communication with the launcher program
假设我有一个名为"parent"的程序,它使用fork()和execl()来启动另一个名为"child"的程序,我想保持这两个程序之间的通信。似乎保持这种通信的最好方法是使用未命名的管道。很容易在"父"程序端找到有关需求的文档和示例,但我在"子"程序端没有找到相同的文档和示例。
例如,我认为这个指南很好,但没有显示我必须在与exec一起启动的程序中做些什么,以便在两个程序之间进行通信,我必须在"父"中使用dup()来共享描述符,但是我在子端正确引用管道来建立两者之间的通信?:http://tldp.org/LDP/lpg/node11.html
在本文中,子进程使用dup
和dup2
(dup2
更好)来设置一个文件描述符作为标准输入。
这个过程与标准输出类似(您需要一个单独的pipe
和相关的文件描述符)。
父进程可以通过在管道的末端读写来与子进程的工作室通信。
当子进程为exec
时,这些文件描述符将被继承,因此在子进程中,相同的管道端点将保持标准输入和输出。
换句话说,如果像本文中那样使用dup
/dup2
设置文件描述符,则不需要在exec
编辑过程中做任何特殊操作,只需在stdio上读写即可。
相关文章:
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- IPC使用多个管道和分支进程来运行Python程序
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 混淆了如何使用IDL与Ethovision进行通信
- 使用命名管道在 C# 和C++应用程序之间进行持续通信
- 通过管道与 PuTTY 通信
- C++ <-> C# 命名管道通信
- MySQL Windows c api 命名管道错误:"在'等待初始通信数据包'时丢失与 MySQL 服务器的连接,系统错误:0
- 我可以使用管道与现有应用程序通信吗?
- Unix如何双向管道通信
- 使用stdout/stderr以外的管道与子流程进行通信
- 使用匿名管道是否为线程间通信引入了内存屏障
- C# 命名管道双向通信
- 使用命名管道的双向C++到 C# 通信
- 如何使用户级应用程序通过管道与根级应用程序通信
- 程序可以使用管道来回通信吗
- 分支子程序中与启动程序进行管道通信的要求
- 此管道通信代码有什么问题?
- 子进程和父进程之间的交互式双向通信(使用管道)