unix 为什么管道的读端只有在写端关闭时才能读字节?

sxpgvts3  于 5个月前  发布在  Unix
关注(0)|答案(2)|浏览(68)

我真的不明白“关闭管道的写端”和“不向管道写入任何内容”之间的区别。如果我不向管道写入任何内容,管道是空的,为什么读端只是阻塞而不是阅读一个阻塞?这和关闭写端有什么区别?

ijxebb2r

ijxebb2r1#

阅读来自管道(或任何东西)的命令表示没有更多的输入,并且将来也不会有更多的输入。
如果当前没有可用的输入,但是管道还没有关闭,那么读取器将(默认)阻塞等待输入;如果写入器随后写入管道,那么读取器将可以使用该数据。一个阻塞将告诉读取器停止尝试读取任何更多数据。

fxnxkyjh

fxnxkyjh2#

这是阻塞文件描述符的协议。管道的读端等待数据。关闭写端表示流结束。这实际上是一个强大的同步概念。
您可以将管道切换到 non-blocking 模式,其中缺少数据被视为软错误,因此您可以检查是否有任何内容可读取。当您有多个文件描述符可供读取时(例如在处理多个客户端的服务器中),这非常有用。这就是 *IO复用 * 的用武之地。

相关问题