2つの同時独立プログラム間のパイプ出力

2つの同時独立プログラム間のパイプ出力

チェスを置くプログラムが2つあるとしましょ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

シェルを指定しなかったため、通常名前付きパイプが最も簡単な方法です。ただし、シェルがこれをサポートしている場合、これはコプロセスの良いユースケースになる可能性があります。

Bashでcoprocコマンドを使用する方法は?

はデータを供給し、a | cmd | b出力を読み取ります。コプロセスで実行するとシェルが 。acmdbcmdab

バッシュから:

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

リンクされた投稿では、補助プロセスの欠点についても説明し、名前付きパイプ(経由)を使用する例を提供しますmkfifo

関連情報