円形 bash パイプ (./progA | ./progB | ./progA) [重複]

円形 bash パイプ (./progA | ./progB | ./progA) [重複]

2つのバイナリがあり、そのうちの1つ(questions.bin)は「1 + 3とは何ですか?」などの質問を投げます。 STDOUTに送信し、STDINから回答を取得します。もう1つはanswers.bin上記の形式のSTDIN質問を受け入れ、それをSTDOUTに印刷します。

私は彼らの出力をお互いにパイプできるようにしたいです。

./questions.bin | ./answers.bin | ./questions.bin

パイプでできる方法はありますか?そうでなければ、他に何をしますか?

答え1

これは単純なユースケースであることがわかりました。名前付きパイプ。以下は私が得たものの修正例です。この回答:

mkfifo backpipe
./questions.bin 0<backpipe | ./answers.bin 1>backpipe

答え2

/dev/fd/xLinuxでは、名前付きパイプのように動作するパイプを参照するfd x属性を使用できます。

: | (./questions.bin | ./answers.bin) > /dev/fd/0

シェルにはシステムコールを介したyash基本インターフェイスがあります。pipe()パイプリダイレクト特徴:

(./questions.bin | ./answers.bin) >>|0

これにより、名前付きパイプを作成する必要があります(および排他的な生成を保証し、それに対するアクセス制限、後続または信号クリーンアップに関連する問題)。

関連情報