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

时间:2014-03-05 22:14:42

标签: c unix pipe

我真的不明白“关闭管道的写入端”和“不向管道写任何东西”之间的区别。如果我没有写任何东西到管道并且管道是空的,为什么读取结束只是被阻止而不是读取EOF?与结束写结束有什么不同?

2 个答案:

答案 0 :(得分:10)

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

如果此时没有可用输入,但管道尚未关闭,则读取器将(默认情况下)阻止等待输入;如果作者然后写入管道,那么该数据将可供读者使用。 EOF会告诉读者停止尝试阅读更多数据。

答案 1 :(得分:0)

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

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