我正在尝试在Linux上运行一些同事为OS X编写的C ++代码。它主要是可移植的,但有一部分我不知道如何处理。他使用popen(CMD, "r+")
打开双向管道,并通过fget
和fprint
与流程进行通信。
在Linux上,类型r+
不可用,因为管道只能是单向的。我想通常的方法是通过套接字处理双向通信,但被叫CMD
是一个交互式程序,我们只能通过它来控制。
经过一些搜索后,我在C中找到了popen2
实现的一些片段。它的工作方式有点但是如果有一种真正的“C ++”方法可以使用流而不是低级来实现它会更容易像write
和read
这样的功能。我也有一些问题,很多沟通都会丢失。
无论如何,我的问题是:将使用双向popen()
的代码移植到POSIX(或至少是OS X + Linux)的最佳方法是什么?
答案 0 :(得分:0)
socketpair(2)创建一对作为双向管道端点的套接字。这将直接替换popen()
。我不明白为什么CMD
成为交互式程序与它有什么关系。
程序可能需要有一个实际的终端设备(不太可能,因为popen
()并不真正模拟一个)。如果是这样,pty(7)手册页提供了有关创建驱动伪tty设备的双向管道的附加文档。