【问题标题】:why is there asymmetrical behavior in pipes为什么管道中存在不对称行为
【发布时间】:2009-06-07 17:06:19
【问题描述】:

为什么没有写入器时读取器可以存在,而当管道中没有读取器时写入器不存在?

。是不是因为读取器是要等待的,所以如果没有写入器也没关系,而写入器已准备好数据,即使它已准备好数据也不知道它需要等待多长时间。

。是不是因为作者的文件描述符会被读者误用(我不清楚如何)

【问题讨论】:

  • 呃......一些上下文会很好......
  • 你说的是哪种管道?命令行管道?命名管道?

标签: pipe


【解决方案1】:

您一定是在谈论管道的一些特定实现。

[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 方式是正确的行为,恕我直言。它应该阻止任何一种方式。

【讨论】:

    【解决方案2】:

    这是因为错误条件是由输出触发的。所以一个没有作者的读者只是坐在那里,不打扰任何事情,因为没有输出试图去某个地方却不能。没有读者的作家试图发送其输出、不能和错误。

    【讨论】:

      【解决方案3】:

      在阅读器的情况下,它会立即阻塞(睡眠),因为没有什么可阅读的。如果作者开始阅读,读者会继续睡觉,不会造成任何伤害。

      对于写入器,它会填满缓冲区并阻塞。如果没有读者出现,那将是纯粹的系统资源浪费。

      仅供参考,以上是有根据的猜测。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多