对fsync()
的调用可确保在同一文件描述符上对write()
的任何已完成调用所写的数据是持久的,即使系统随后崩溃并重新启动它们也是可读的
还有一种情况是调用write()
的效果可能会在他们去磁盘的路上重新排序,所以如果你没有fsync()
那么你可能会看到后来调用的效果到write()
而不是早先的。{/ p>
据我所知,即使在fsync()
次调用之间,附加到文件似乎也相当安全:在崩溃之后,生成的文件是fsync()
编辑的内容,也可能是编写其他任何内容的初始子序列。该文件不可能包含以后的写入而不是早期的写入,或者包含垃圾数据而不是实际写入的内容(可能取决于您使用的文件系统以及您选择的选项,例如{{ 1}}和ext3
有ext4
vs data=ordered
)。
更不清楚的是在覆盖文件中间的某些块时崩溃的影响。在这种情况下,在崩溃后读取文件时是否可能会看到任何块的子集被覆盖?如果是这样,实际上是否有任何方法可以安全地更新文件的中间部分,或者您是否基本上必须依赖仅附加日志才能获得持久性?
在data=writeback
通话时,或者之后启动的write()
来电是否有任何保证?我将在哪里找到这些保证的权威来源?