关于EOF和Reader / Writer同步

时间:2012-05-28 06:54:45

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

  

块引用

O.S怎么知道作家还在写作。 ?... EOF for file的工作流程是什么(关闭文件句柄,如^ D或^ z)? 如果从未写过EOF会怎么样?

如果读者的阅读速度快于作家的写作速度,会发生什么?速率不匹配会导致死锁吗?

可能是其他不需要的场景?

O.S在读取文件时如何计算EOF?

-Nikhil

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

  

块引用

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

现在我知道EOF没有字符,所以它不能写在文件数据上。如果O.S.使用File_size确定EOF,就像@saurabh指出的那样。

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

  • 因此,进程会继续轮询文件表以查找文件大小以确定EOF,因为可能存在未修复文件大小的情况。
  • 据我所知,当您阅读超出 EOF(在我们的案例中为文件大小)时会遇到EOF。假设作者间歇性地写作并且读者正在阅读块。因此,如果读者试图阅读超过可用的块将EOF被抛出?但是作家还没有表示EOF呢?

2 个答案:

答案 0 :(得分:0)

  1. 直到程序不要关闭文件。操作系统假定可以读取/写入文件或两者都有(取决于打开文件的模式)。

  2. EOF什么都不是,但OS从文件大小知道它。可以说,你的文件大小为100字节,你要求从字节99读取并再请求6个字节,然后OS知道该文件只有100个字节,所以它将返回EOF。

答案 1 :(得分:0)

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