io「クロス」2つのプログラムにリダイレクト

io「クロス」2つのプログラムにリダイレクト

stdin両方のプログラムのANDを「クロス」する方法は?特に、インタラクティブなtic-tac-toeゲーム、tic-tac-toeとtic-tac-toestdoutという2つのプログラムがあります。それらはすべて表示する位置を示す数字(0〜8)を出力し、ユーザーが表示したい場所を表す別の数字(0〜8)を期待します。これらの2つの違いは、最初に動くものと後で動くことです。インタラクティブなユーザーにとっては、すべてうまく機能します。 ioリダイレクトを使用して互いに対話させることはできますか?pgm1pgm2pgm1pgm2

私は次のようなものを無駄に試しました。

  1. pgm2別の端末(入力待ち)で開き、そのpidを見つけます。その後、pgm1別の端末で実行します。./pgm1 < /proc/pid_pgm2/fd/1 > /proc/pid_pgm2/fd/0
  2. たとえば、mkfifoを使用して2つのパイプを作成し、pipe12pipe2つの異なる端末で次のコマンドを実行しました ./pgm1 < pipe1 > pipe2 ./pgm2 < pipe2 > pipe1
  3. 上記の両方を試してpgm2の前にpgm1を実行し、pgm1の前にpgm2を実行
    します。fflush(stdout)printf()

誰が私が何を見逃しているのか、または何が間違っているのか、またはこれが可能かどうかを教えてください。

ベストアンサー1

FIFOとパイプと連携できるようにする必要があります。

$ mkfifo fifo
$ ./pgm2 < fifo | ./pgm1 > fifo

プログラム2の入力はfifo、出力はパイプです。プログラムの入力はパイプで、出力はfifoです。

しかし注意してください。これは通常非常にアクティブであり、プロセス間の「ping / ポン」が完璧でないとデッドロックにつながる可能性があります。

このスタックオーバーフローの質問も参照してください。2番目のプロセスの標準出力を1番目のプロセスの標準入力にリダイレクトするにはどうすればよいですか?

おすすめ記事