我真的不明白“关闭管道的写入结束”和“不写入任何东西到管道”之间的区别。如果我没有写入任何东西到管道中,并且管道是空的,为什么读取端只是被阻塞而不是读取EOF?与关闭写入结束有什么不同?只有当写入结束时,管道的读取结束才会读取EOF?
回答
从管道(或任何东西)读取EOF表示没有更多输入,并且将来不会有任何输入。
如果此时没有可用输入,但管道尚未关闭,则读卡器将(默认情况下)阻止等待输入;如果作者随后写入管道,那么这些数据将会提供给读者。 EOF会告诉读者停止尝试读取更多数据。
因此,EOF不像从管道中读取的文字内容?这就像是当所有写入结束都关闭时内核发送到读取结束的信号? – Xufeng
@旭峰:对。 EOF是C库的一个组合值。它在操作系统中不存在。 –
@旭峰:对。将其称为文件结束条件会更准确。它如何显示取决于你如何从管道中读取数据。如果使用'fgetc()',它将返回'EOF',这是一个与任何'unsigned char'值不同的负的'int'值。其他一些函数返回读取的项目数量;例如,'read()'函数返回'0'来表示文件结束。 (或错误条件)。 –
这就是阻止文件描述符的协议。管道的读取端等待的数据。关闭它的写入结束信号表示流结束。这实际上是一个强大的同步概念。
您可以将管道切换到非阻塞模式,其中缺少数据被视为软错误,因此您可以检查是否有任何要读取的内容。当有多个文件描述符可以读取时(如处理多个客户端的服务器),这非常有用。这就是IO复用进来。
- 1. 如果我不关闭读取结束或写入结束管道,会发生什么情况?
- 2. java.io.IOException - IO流结束读取
- 3. IOException:读取结束死亡
- 4. 当读取int结束于C++
- 5. Mysterious =>从管道读取时发生错误:管道已结束。 (109,0x6d)
- 6. 如何逐行读取并检测eof(文件结束)?
- 7. NodeJS - 写入文件有时会结束
- 8. 如何在没有输入读取时结束作业
- 9. 读取结束XML文件中的PHP
- 10. MPI文件的读取未结束
- 11. 大文件的性能读取结束
- 12. C#读取写入文本文件结束在中东
- 13. c#如何结束流读取器
- 14. 如何确定读取结束
- 15. Shellscript不读取结束大括号
- 16. 读取数据开始到结束
- 17. 当管道读取流写入流时,听写吗?
- 18. golang扫描器读取直到读取器结束
- 19. 阅读直到频道结束
- 20. 用fread读取文件不会如预期的那样结束
- 21. 如何修复ObjectInputStream和ObjectOutputStream的“写入结束死亡”和“读取结束死亡”错误?
- 22. 结束管道操作
- 23. 只有当madsed结束时才应用ng-mouseover?
- 24. fprintf vs WriteFile写入管道:无法从所有管道读取
- 25. 意外结束时,它不会结束
- 26. 在C中读取/写入UNIX管道
- 27. 如何多次写入/读取管道
- 28. 多线程:读取/写入管道
- 29. 处理FileStream不会结束异步读取
- 30. 读取tfrecord文件永远不会结束
好吧,想想它就像一个电话。只是因为目前没有人说什么并不意味着他们不会很快开始。 EOF就像他们挂起。 – RedX