两个同时独立程序之间的管道输出

两个同时独立程序之间的管道输出

假设我有两个下国际象棋的程序:chess_1chess_2。他们自己跟踪棋盘,并将相反的动作作为输入,然后输出他们的动作。例如,如果我想与 比赛chess_1,我会执行以下操作:

我会启动该程序(假设我是白人)

$ ./chess_1                  # program starts and hangs for input
  <my move>                  # my input
  <the bot's move>           # bot output
  <my next move>             # my input
.... < etc. > .....

机器人会跟踪游戏板。我的问题是,我该如何chess_1对抗chess_2

答案1

您没有指定 shell,因此,一般来说,命名管道是最简单的方法。但是,如果您的 shell 支持它们,那么这可能是协进程的一个很好的用例。

如何在 Bash 中使用 coproc 命令?

在 中a | cmd | ba将数据馈送到cmdb读取其输出。cmd作为协进程运行允许 shell 既是 又ab

在bash中:

coproc ./chess_1
./chess_2 < "${COPROC[0]}" > "${COPROC[1]}"

链接的帖子还讨论了协进程的缺点,并提供了使用命名管道的示例(通过mkfifo)。

相关内容