【问题标题】:Two way pipe in LinuxLinux 中的双向管道
【发布时间】:2015-10-02 17:53:52
【问题描述】:

因此,如果我在 gcc stdio.h 中使用 popen(),我可以将父母的标准输出通过管道传输到其孩子的标准输入,或者我可以将孩子的标准输出通过管道传输到父母的标准输入。我想同时做这两件事。有没有办法使用 popen 来做到这一点,还是我需要使用较低级别的工具(如共享内存)来完成这项工作?

注意:看起来在 FreeBSD 中 popen 可以通过 "r+" 读写。我不明白孩子的标准输出是如何通过管道传输到父母和父母的标准输出的。无论如何,这可能对我有用,但在 Linux 中似乎并非如此。如果我在这一点上弄错了,那将回答我的问题。这是我收到此注释的链接:https://www.freebsd.org/cgi/man.cgi?query=popen&sektion=3

注意 2:我更喜欢一种可以在几乎所有 Linux 发行版、FreeBSD 和 OSX 上按优先级排列的可移植解决方案。话虽如此,我很乐意至少让它在 Ubuntu 14.04 中运行。

【问题讨论】:

  • 一个简单的使用管道进行双向通信的方法是打开两个管道,一个用于父子到子,一个用于子到父

标签: c linux popen


【解决方案1】:

你说的很对。

某些环境支持带有双向管道的“增强型”popen() - 但它不是“标准的”。

如果您想移植到所有版本的 'nix(Linux、BSD、OSX 等),您应该使用“pipe/fork/dup2”:

【讨论】:

  • 美丽。很高兴听到...感谢您的跟进!
  • 理想情况下,它实际上是 pipe x2/fork/close x2/fcntl(FD_CLOEXEC) x2/dup2 x2/exec。必须保持文件描述符干净
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多