0

最初に fifo を作成します

mkfifo a.fifo

それから私はそれに何かをエコーし​​ます

echo 1 > a.fifo

別のターミナルを開き、それに sth も追加します

echo 2 > a.fifo

もちろん、2つはすべてブロックされているので、fifofileから読み取ります

read -n1 < a.fifo

全部解放されて1体しか手に入らず、もう1体は行方不明…

私の質問は、なぜそれが起こったのか、データを失うことなく fifo ファイルからコンテンツを 1 つずつ取得するにはどうすればよいですか?

どうも

4

1 に答える 1

3

することでread -n1 < a.fifo、あなたは

  1. a.fifo読むために開いた
  2. 一文字読む
  3. 閉まっているa.fifo

いずれかの端で fifo を閉じると、両端で閉じます。

不要になるまで開いたままにしておきます。

exec 3< a.fifo    # open for reading, assign fd 3
read -r line1 <&3 # read one line from fd 3
read -r line2 <&3 # read one line from fd 3
exec 3<&-         # close fd 3

そしてもう一方の端で:

exec 3> a.fifo       # open for writing, assign fd 3
printf 'hello\n' >&3 # write a line to fd 3
printf 'wolrd\n' >&3 # write a line to fd 3
exec 3>&-            # close fd 3

リダイレクトの詳細については、 http://wiki.bash-hackers.org/howto/redirection_tutorialを参照してください。

于 2015-11-18T07:30:43.770 に答える