【发布时间】:2016-12-16 04:18:44
【问题描述】:
程序 Foo 定期更新文件并调用我的 C 程序 Bar 来处理文件。
问题是 Foo 可能会更新文件,调用 Bar 来处理它,当 Bar 读取文件时,Foo 可能会再次更新文件。
Bar 是否可以在不一致的状态下读取文件,例如读取由第一个 Foo 写入的文件的前半部分和由第二个 Foo 写入的另一半?如果是这样,假设我只能修改 Bar 的代码,我将如何防止这种情况发生?
【问题讨论】:
-
是的,您可以从文件的两个版本中获得一些混合数据,但发生这种情况的可能性取决于文件的大小以及 Foo 写入文件的方式以及 Bar 读取文件的方式。一种可能性是让 Bar 使用带有私有映射的
mmap()来读取文件;这应该为您提供文件的一致快照(可能)。不过,您必须在每个周期重新映射内存。