没有 dup 的 execl 管道

Posted

技术标签:

【中文标题】没有 dup 的 execl 管道【英文标题】:execl pipe without dup 【发布时间】:2009-09-11 21:02:16 【问题描述】:

我正在尝试使用 execl 从父级执行程序。我进行正常的管道设置和分叉。这是诀窍...我需要我的孩子(可以有任意数量的孩子)与父母交流。

程序“A”(父)创建管道分叉并执行到“B”(子)。在程序 B 的 main() 函数中,我需要能够读写管道。

在excel接管并执行我的子进程后,有什么方法可以访问我在子进程中的管道文件描述符?

谢谢你, ~埃里克

【问题讨论】:

【参考方案1】:

execl(3) 对文件描述符没有影响,只有一个例外

可以使用fcntl(2) 标记文件描述符close-on-exec,但通常execve(2) 的各种风格对打开的文件描述符没有影响,并且它们在子项中保持打开状态。

【讨论】:

谢谢。我发现将管道的“in”和“out”文件描述符作为参数传递给程序“B”就可以了。【参考方案2】:

阅读 Beej 的 Unix 进程间通信指南(您可以在 http://beej.us/guide/ 找到它),尤其是第 4 节。

【讨论】:

以上是关于没有 dup 的 execl 管道的主要内容,如果未能解决你的问题,请参考以下文章

Unix上用C程序实现pipe管道命令“ | “(pipe,fork,dup2,close,execl,重定向)

平行管道没有在C中关闭?

无名管道跟dup,dup的使用

如何管道自己的输出到另一个进程?

使用 os.execl() 重新加载时没有名为“x”的模块

19重定向管道与popen模型