2013-03-13 25 views
11

mkfifoで作成された名前付きパイプに書き込もうとしています。しかし、私がコマンド(例えばls > myNamedPipe)を実行すると、もはやコマンドをbashに入力することはできません。私はまだ文字を書くことができ、それはかなりです。名前付きパイプに書き込むことができません

答えて

18

名前付きパイプは、他の場所から読み取るまで開いたままです。これは、異なるプロセス間の通信を可能にするためです。

試してください:あなたはあなたに最初の端末を返却した場合、あなたは今、他のコマンドを入力することができますことに気づくでしょう

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 
+0

よろしくお願いします。本当にありがとう! – tay10r

+0

ありがとう - これは素晴らしいです!どうして私に説明することができますか?私は 'exec 3 <> fifo'行が物事をどのように修正するのかをあまり理解していません。 – Joost

+4

fifoをファイル記述子に付けると、シェルはfifoに書き込まれたデータをバッファリングします。それがなければ、何かが書かれたものを読むまで、FIFOブロックへの書き込みはありません。ファイルディスクリプタでは、 "foo"と "bar"はシェルによってバッファリングされ、そのファイルディスクリプタから読み取るものは後で読み込むことができます。 – chepner

関連する問題