3

我需要执行一个外部程序并交替访问它的标准输入和标准输出,就像控制台终端本身一样。我使用了 popen(),但它不提供双向管道。使用 pipe() 和 fork() 也不能交互地工作,因为必须关闭写管道才能访问读管道。

请给我一些帮助来想出它。

4

3 回答 3

4

您需要打开两个管道,一个连接到子进程的标准输入,一个连接到标准输出。您可能还需要一些方法在您的流程中多路复用输入/输出。

另一种选择可能是使用伪终端,这将使您与具有伪终端的客户端软件进行双向通信,因为它是 I/O 通道 - 尽管我不太确定您要执行的步骤这个,我只是建议它,因为我知道其他程序,例如 xterm 和 ssh 使用该方法。

之前也问过同样的问题,答案和我在第一段中描述的差不多: popen 同时读写 (这个答案包括一些看起来不错的代码!)

于 2013-02-01T12:26:04.040 回答
1

您将不得不使用特定于操作系统的工具来为 stdout 和 stdin(以及 stderr,如果您愿意)创建单独的管道。在 POSIX 平台上,您可以使用dup2()将适当的管道末端放置到标准输出和标准输入(以及标准错误)。之后您将不得不恢复原始描述符fork(),所以不要忘记在放置新描述符之前保存它们。

于 2013-02-01T12:29:36.480 回答
0

管道不是那样工作的。您只能使用读取或写入管道。

此外,由于方向的原因,标准输入和输出不能是同一个端点。它来自“管道工作”。有人开始并把一些东西放到标准输出中,这些东西可以被其他人用作标准输入,然后又把它放在标准输出中作为第三个......

对于双向通信,您需要找到另一种进程间通信方式。它是什么取决于您的实施。

于 2013-02-01T12:26:45.783 回答