0

调用fsync()确保由write()对同一文件描述符的任何已完成调用写入的数据是持久的,即使系统随后崩溃并重新启动,它们也将是可读的。

在这种情况下,调用的效果write()可能会在它们到达磁盘的途中被重新排序,所以如果你不这样做,fsync()那么你可能会看到后来调用的效果,write()但看不到早期调用的效果。

据我了解,即使在fsync()调用之间附加到文件似乎也相当安全:崩溃后,生成的文件是fsync()编辑的内容加上可能是其他任何内容的初始子序列。文件不可能包含后来的写入而不是较早的写入,或者包含垃圾数据而不是实际写入的内容(可能取决于您使用的文件系统以及您选择的选项,例如ext3ext4拥有data=orderedvs data=writeback)。

不太清楚的是覆盖文件中间的某些块时崩溃的影响。在这种情况下,是否有可能在崩溃后读取文件时看到块的任何子集被覆盖?如果是这样,实际上是否有任何方法可以安全地更新文件的中间,或者您基本上必须依靠仅附加日志来实现持久性?

对于通话时正在进行的通话或之后开始的通话,是否有任何保证?我该去哪里找到这些保证的权威来源?write()fsync()

4

0 回答 0