gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:15 26 4
gpt4 key购买 nike

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

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

经过一番搜索后,我发现了一些用 C 语言实现的 popen2 片段。它有点工作,但如果有真正的“C++”方式使用流而不是使用流来实现它会容易得多低级函数,如 writeread。此外,我还遇到了一些缺少大量通信的问题。

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

最佳答案

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

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

关于c++ - 将使用双向 popen() 的 C++ 代码移植到 POSIX 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37159483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com