为什么只有在写入结束时,pipe道的读取结束才能读取EOF?

我真的不明白“closurespipe道写入结束”和“不写入任何东西到pipe道”之间的区别。 如果我没有写入任何东西到pipe道和pipe道是空的,为什么只读取结束而不是读取EOF? 与closures写入结束有什么不同?

从管道(或从任何东西)读取EOF表明没有更多的输入,并且将来不会有任何输入。

如果此时没有可用输入,但管道未关闭,则读卡器将(默认)阻止等待输入; 如果作者写入管道,这些数据将可供读者使用。 EOF将告诉读者停止尝试读取更多的数据。

这是阻塞文件描述符的协议。 管道的读端等待数据。 关闭写入结束信号表示流结束。 这实际上是一个强大的同步概念。

您可以将管道切换到非阻塞模式,在那里缺少数据被视为软错误,因此您可以检查是否有任何要读取的内容。 当有多个文件描述符可以读取时(如处理多个客户端的服务器),这是非常有用的。 这就是IO复用进来的地方。