0

select(2)一度に複数の FIFO を読み取り (おそらく を使用)、読み取った内容を出力し、すべての FIFO が閉じられたときにストリームを閉じるツールを探しています。より正確に言うと、 は次のprogramように動作します。

$ mkfifo a b
$ program a b > c &
$ echo 'A' > a
$ echo 'B' > b
[1]  + done       program a b > c
$ cat c
A
B
$ program a b > c &
$ echo 'B' > b
$ echo 'A' > a
[1]  + done       program a b > c
$ cat c
B
A

私の最初の試みは を使用することcatでしたが、2 番目の例は機能しません (echo 'B' > bハングcatします)。この場合に使用する正しいツールは何ですか?

4

1 に答える 1

0

テールはそれを行います。

使用する:

tail -q -n +1 a b

編集:うまくいきませんでした。私は何か他のものを見つけることができるかどうか見ていきます。

何も見つかりませんでした。

これを自分でプログラムしたくない場合は、複数のコマンドをお勧めします。

#!/bin/sh
rm c
cat a >> c &
cat b >> c &
wait

インターリーブが発生する場合がありますが、それ以外の場合はすべて正常に動作するはずです。待機は、すべての cat プログラムが完了するまでプログラムが終了しないようにするためです (すべての完了後に実行する必要があるコマンドがある場合に備えて)。そして、rm は、cat コマンドがファイルに追加されるため、c が空で始まることを確認することです。

于 2011-07-28T07:10:37.650 に答える