繁体   English   中英

C ++中的交互式管道

[英]Interactive pipe in C++

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

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

您需要打开两个管道,一个连接到子进程的stdin,一个连接到stdout。 您可能还需要一些方法来在您的过程中复用输入/输出。

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

之前已经问过同样的问题,答案几乎就是我在第一段中所描述的: popen同时读写 (这个答案包括一些看起来不错的代码!)

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

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

此外,由于方向的原因,标准输入和输出不能是相同的终点。 它来自“管道工作”。 有人开始并将某些内容放到stdout上,这可以被其他人用作stdin,并且再次将其添加到第三个stdout ......

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM