チェスを置くプログラムが2つあるとしましょ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
シェルを指定しなかったため、通常名前付きパイプが最も簡単な方法です。ただし、シェルがこれをサポートしている場合、これはコプロセスの良いユースケースになる可能性があります。
はデータを供給し、
a | cmd | b
出力を読み取ります。コプロセスで実行するとシェルが 。a
cmd
b
cmd
a
b
バッシュから:
coproc ./chess_1
./chess_2 < "${COPROC[0]}" > "${COPROC[1]}"
リンクされた投稿では、補助プロセスの欠点についても説明し、名前付きパイプ(経由)を使用する例を提供しますmkfifo
。