将使用双向 popen() 的 C++ 代码移植到 POSIX 的最佳方法

Best way to port C++ code that uses a bidirectional popen() to POSIX

我正在尝试获取同事为 OS X 编写的 Linux 上的一些 C++ 代码 运行。它主要是可移植的,但有一部分我不知道怎么处理。他使用popen(CMD, "r+")开启双向管道,通过fgetfprint.

与进程通信

在 Linux 上,类型 r+ 不可用,因为管道只能是单向的。我想通常的方法是通过套接字处理双向通信,但被调用的 CMD 是一个交互式程序,我们只能对其进行有限的控制。

经过一番搜索后,我发现了一些 popen2 在 C 中实现的片段。它有点工作,但如果有一个真正的 "C++" 方法来代替使用流来完成它会容易得多像 writeread 这样的低级函数。我也有一些问题,很多沟通都丢失了。

无论如何,我的问题是:将使用双向 popen() 的代码移植到 POSIX(或至少 OS X + Linux)?

socketpair(2) 创建一对作为双向管道端点的套接字。这将直接替换 popen()。我不明白为什么 CMD 是或不是交互式程序与它有任何关系。

程序可能需要有一个实际的终端设备(不太可能,因为 popen() 并没有真正模拟终端设备)。如果是这样,pty(7) 手册页提供了有关创建驱动伪 tty 设备的双向管道的附加文档。