2009-06-07 10 views
2

パイプに読者がいないときにライターが存在しないときにリーダーが存在するのはなぜですか?なぜパイプに非対称的な振る舞いがあるのですか

。それは、ライターがデータで準備ができていて、データの準備ができていてもどれくらい待たなければならないのかわからないのに対して、ライターがいないと大丈夫だからです。

。これは、作者のファイル記述子が読者によって悪用される可能性があるからです(私は明確ではありません)

+1

ええと...いくつかの文脈はうまくいくでしょう.... – skaffman

+1

あなたはどんなパイプについて話していますか?コマンドラインパイプ?名前付きパイプ? – Eddie

答えて

0

読者の場合は、読むことがないため、すぐにブロック(スリープ)します。ライターが始まると、読者は眠り続け、害はない。

ライターの場合は、バッファーをいっぱいにしてブロックします。読者がいなくてもシステムリソースの純粋な浪費になります。

FYI、上記は推測された推測です。

1

エラー状態は出力によって引き起こされるからです。だから、読者がいない読者だけがそこに座って、何か気にしないでください。なぜなら、どこかへ行きたいと思っているものがないからです。読者がいない作家は、その出力を送信しようとします。

5

パイプの特定の実装について話している必要があります。

[Proc 1] 
$ mkfifo /tmp/mypipe 
$ echo "No Boom Here" > /tmp/mypipe 
<process blocks> 

[Proc 2, later] 

$ cat /tmp/mypipe 
No Boom Here 

Unixシステムでは正常に動作しますので、読者やライターのないパイプを読み書きすることができます。しかし、あなたのプロセスは、コンパニオンがアップするまでブロックされます。

これはおそらくWindowsのことですか?

脇に、Unixのやり方は、適切な動作、IMHOです。いずれかの方法でブロックする必要があります。