如何使2个可执行文件在Windows中双向通信

时间:2010-05-23 22:10:55

标签: windows redirect input standards

我有2个Windows控制台应用程序,从标准输入读取并写入标准输出。我想假设我没有任何源代码(实际上我通常有其中一个的源代码)。

我想将一个的标准输出指向另一个的标准输入,反之亦然,从而允许通信(目标是允许两个播放特定游戏的节目相互播放)。

如何做到这一点?我愿意做一些C / C ++编程或其他任何需要的东西。

奥伦。

2 个答案:

答案 0 :(得分:1)

这在控制台中是不可能的,因为流重定向总是形成非循环图。

要获得您正在寻找的循环重定向,您可以编写一个调用两个可执行文件的小程序,并管理每个进程的输入和输出流的连接。连接的每对流(来自每个程序的输入流和输出流)将需要一个线程从输出流中提取数据并将其推入输入流。因此,您将需要2个线程,因为有2组输入/输出流对。

以下是连接各种流的步骤:

  • 创建两个缓冲区,B1和B2。
  • 启动程序1,(P1)并获取输入和输出流句柄。
  • 将P1输入连接到缓冲区B1的输入侧,P1输出到缓冲区B2的输出侧。
  • 启动程序2,(P2)并获取输入和输出流句柄
  • 将P2输入连接到缓冲器B2的输入侧,P2输出到缓冲器B1的输出侧。 (请注意,此B1 / B2与上面的P1连接相反。)

缓冲区是活动线程,从输入端读取并写入输出端。

缓冲区必须检测输入端的流末端并相应地关闭输出端。当双方都关闭时,运行缓冲区的线程可以退出。

答案 1 :(得分:0)

您必须将两个进程转换为父进程的子进程,这将在两个进程之间传递消息,并且您必须编写父进程。

有很多语言可以解决。我个人会用Python中的subprocess模块来解决这个问题。这基本上是_popen()的包装器,可以在C / C ++中访问,但如果快速的Google搜索是任何指示器,那么学习Python比使用它更容易。如果您了解Ruby,那么Ruby就有一个类似的库。

在任何情况下,我认为使用套接字比使用stdinstdout更简洁,更可靠,如果这是一个选项。