2

ライターが存在しない場合にリーダーが存在しても問題ないのに、パイプにリーダーが存在しない場合にライターが存在しても問題ないのはなぜですか?

. リーダーは待機することを意図しているため、ライターがなくても大丈夫ですが、ライターはデータの準備ができており、データの準備ができていてもどれだけ待機する必要があるかわかりません。

. ライターのファイル記述子がリーダーによって悪用される可能性があるためですか(方法はわかりません)

4

3 に答える 3

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。どちらの方法でもブロックする必要があります。

于 2009-06-07T18:04:45.220 に答える
1

エラー状態が出力によってトリガーされるためです。したがって、ライターがいないリーダーは、何も気にせずにただそこに座っているだけです。リーダーのないライターは、その出力を送信しようとしますが、送信できず、エラーが発生します。

于 2009-06-07T17:19:02.700 に答える
0

リーダーの場合、読み取るものが何もないため、すぐにブロック (スリープ) します。ライターが開始された場合、リーダーは引き続きスリープ状態になり、害はありません。

ライターの場合、バッファとブロックがいっぱいになります。リーダーが来ない場合は、システム リソースの純粋な浪費になります。

参考までに、上記は経験に基づいた推測です。

于 2009-06-07T17:20:07.970 に答える