为什么当没有作者时读者可以存在,但当管道中没有读者时,作者不能存在?
. 是不是因为读取器是要等待的,所以如果没有写入器也没关系,而写入器已准备好数据,即使它已准备好数据,也不知道它必须等待多长时间。
. 是不是因为作者的文件描述符可能被读者滥用(我不清楚如何)
为什么当没有作者时读者可以存在,但当管道中没有读者时,作者不能存在?
. 是不是因为读取器是要等待的,所以如果没有写入器也没关系,而写入器已准备好数据,即使它已准备好数据,也不知道它必须等待多长时间。
. 是不是因为作者的文件描述符可能被读者滥用(我不清楚如何)
您一定在谈论管道的一些特定实现。
[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方式是正确的行为,恕我直言。它应该阻止任何一种方式。
这是因为错误条件是由输出触发的。因此,没有作者的读者只是坐在那里,不打扰任何事情,因为没有输出试图去某个地方而不能去。没有读者的作家试图发送其输出、不能和错误。
在阅读器的情况下,它会立即阻塞(睡眠),因为没有什么可阅读的。如果作家开始读者继续睡觉,并没有造成伤害。
对于作家来说,它会填满缓冲区并阻塞。如果没有读者出现,那将是纯粹的系统资源浪费。
仅供参考,以上是有根据的猜测。