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

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

我希望将一个标准输出引导到另一个的标准input,反之亦然,从而允许通信(目标是允许两个玩特定游戏的程序相互竞争)。

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

奥伦。

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

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

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

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

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

缓冲区将不得不检测输入端的流结束,并相应地关闭输出端。 当双方都关闭时,运行缓冲区的线程可以退出。

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

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

在任何情况下,我认为使用套接字将是比使用stdinstdout更干净和更可靠的方法,如果这是一个选项。