【问题标题】:About EOF and Reader/Writer synchronization关于 EOF 和 Reader/Writer 同步
【发布时间】:2012-06-02 13:51:51
【问题描述】:

块引用

O.S 如何知道作者仍在写作。 ?...文件的EOF工作流程是什么(关闭文件句柄,如^D或^z)? 如果 EOF 从未被写入会发生什么?

如果读者的阅读速度快于作家的写作速度会怎样?速率不匹配会导致死锁吗?

还有哪些不受欢迎的场景?

OS在读取文件时如何计算EOF?

-尼基尔

P.S:当前的操作系统是 windows,但我不介意在 unix 上学习有趣的功能。

块引用

有关问题的更多编辑和更多信息

现在我知道EOF不是字符,所以它不能写在文件的数据上。如果操作系统使用 File_size 确定 EOF,就像@saurabh 指出的那样。

(->) 读取时的EOF(可能由存储在相应文件系统的驱动器表中的文件大小确定)

  • 因此进程会不断轮询文件表以获取文件大小以确定 EOF,因为可能存在文件大小不固定的情况。
  • 据我所知,当您阅读超出 EOF(在我们的例子中是文件大小)时会遇到EOF。假设 writer 间歇性地写入而 reader 正在读取块的情况。所以如果读者试图阅读比可用块更多的内容,EOF 会被抛出吗?但是 Writer 还没有发出 EOF 信号吗?

【问题讨论】:

  • 对于文件,没有特殊的字节或字节序列表示文件结束。写入文件的程序可以在文件打开时随时写入,操作系统只有在文件关闭时才知道程序已完成。
  • 最后,我确实发现这篇文章对于解释 eof 部分及其工作流程非常有用。 can-we-write-an-eof-character-ourselves 。特别是@b-gen-jack-o-neill 的帖子

标签: c++ file io eof read-write


【解决方案1】:
  1. 直到程序不关闭文件。操作系统假定文件可以读/写或两者兼而有之(取决于打开文件的模式)。

  2. EOF 什么都不是,但操作系统通过文件大小知道它。假设您的文件大小为 100 字节,并且您要求从第 99 字节读取并要求再请求 6 个字节,然后操作系统知道该文件只有第 100 个字节,因此它将返回 EOF。

【讨论】:

  • 谢谢伙计!加2分。如果操作系统从文件大小确定 EOF,如果文件大小未知,会发生什么。或者可能会动态变化(添加内容)?。
【解决方案2】:

如果您从一个进程写入文件并从另一个进程读取文件,您可能需要考虑使用管道。这些是专门为您的目的而设计的特殊文件:您只能在一端写入,在另一端读取,并且如果没有任何数据要读取,则读取器会阻塞或收到通知...
是的,没有特殊的 EOF 标记。如果使用普通文件并且您不太喜欢头痛,请不要在多个进程中同时处理它们。

【讨论】:

  • 是的,有些类似,然后通过套接字传输。
猜你喜欢
  • 2017-06-10
  • 2012-05-11
  • 1970-01-01
  • 2015-09-07
  • 2018-08-10
  • 2020-05-17
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
相关资源
最近更新 更多