假设我有两个下国际象棋的程序:chess_1
和chess_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 支持它们,那么这可能是协进程的一个很好的用例。
在 中
a | cmd | b
,a
将数据馈送到cmd
并b
读取其输出。cmd
作为协进程运行允许 shell 既是 又a
是b
。
在bash中:
coproc ./chess_1
./chess_2 < "${COPROC[0]}" > "${COPROC[1]}"
链接的帖子还讨论了协进程的缺点,并提供了使用命名管道的示例(通过mkfifo
)。