我有一个 linux 嵌入式环境。
这里我有2个场景:
A:
- 打开并写入一个临时文件。
- 将临时文件重命名为原始文件。
- 电力流失
结果:重新启动后,我拥有的是:
- 0 大小的原始文件,并且没有临时文件。
乙:
打开并写入一个临时文件。
FSYNC临时文件。
将临时文件重命名为原始文件。
电力流失
结果:重启后,
- 保留原始文件的原始内容,但未实现
- 0 大小的临时文件
如您所见,在这两种情况之间,唯一的区别是临时文件的 fsync,而不是原始文件。在这两种情况下,我都没有 fsync 原始文件。
那么,为什么原始文件的原始内容会保留在场景 B 中呢?
从原始文件的角度来看,更改是通过重命名non-fsynced file vs fsynced file来实现它。
这如何保留原始内容?
编辑:
这种实现原始文件的场景也未能安全地实现原始文件:
打开并写入一个临时文件。
FSYNC 临时文件。
将临时文件重命名为原始文件。
fsync 原始文件所在目录
电力流失
结果:
0 大小的原始文件。
那么,我该怎么做呢?