11
mkfifoで作成された名前付きパイプに書き込もうとしています。しかし、私がコマンド(例えばls > myNamedPipe
)を実行すると、もはやコマンドをbashに入力することはできません。私はまだ文字を書くことができ、それはかなりです。名前付きパイプに書き込むことができません
mkfifoで作成された名前付きパイプに書き込もうとしています。しかし、私がコマンド(例えばls > myNamedPipe
)を実行すると、もはやコマンドをbashに入力することはできません。私はまだ文字を書くことができ、それはかなりです。名前付きパイプに書き込むことができません
名前付きパイプは、他の場所から読み取るまで開いたままです。これは、異なるプロセス間の通信を可能にするためです。
試してください:あなたはあなたに最初の端末を返却した場合、あなたは今、他のコマンドを入力することができますことに気づくでしょう
cat fifo
:
mkfifo fifo
echo "foo" > fifo
はその後、別の端末とタイプを開きます。
も参照してください何が逆でhappends:
# terminal 1
cat fifo
# terminal 2
echo "foo" > fifo
# and now you can see "foo" on terminal 1
あなたは、端末FIFOにファイルディスクリプタを添付し、FIFOに何かを書き込もうとしたときに「にハングアップ」していない場合:
mkfifo fifo
exec 3<> fifo
echo "foo" > fifo
echo "bar" > fifo
よろしくお願いします。本当にありがとう! – tay10r
ありがとう - これは素晴らしいです!どうして私に説明することができますか?私は 'exec 3 <> fifo'行が物事をどのように修正するのかをあまり理解していません。 – Joost
fifoをファイル記述子に付けると、シェルはfifoに書き込まれたデータをバッファリングします。それがなければ、何かが書かれたものを読むまで、FIFOブロックへの書き込みはありません。ファイルディスクリプタでは、 "foo"と "bar"はシェルによってバッファリングされ、そのファイルディスクリプタから読み取るものは後で読み込むことができます。 – chepner