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

时间:2016-05-11 10:11:35

标签: c++ c posix

我正在尝试在Linux上运行一些同事为OS X编写的C ++代码。它主要是可移植的,但有一部分我不知道如何处理。他使用popen(CMD, "r+")打开双向管道,并通过fgetfprint与流程进行通信。

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

经过一些搜索后,我在C中找到了popen2实现的一些片段。它的工作方式有点但是如果有一种真正的“C ++”方法可以使用流而不是低级来实现它会更容易像writeread这样的功能。我也有一些问题,很多沟通都会丢失。

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

1 个答案:

答案 0 :(得分:0)

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

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