【发布时间】:2017-05-05 10:34:09
【问题描述】:
在 Linux(Ubuntu 平台)设备上,我使用文件来保存关键任务数据。
有时(大约 10,000 例中出现一次),文件会因不明原因而损坏。 特别是,文件被截断(而不是一些 kbyte,它只有大约 100 个字节)。
现在,在软件的序列中
- 文件已打开,
- 修改和
- 关闭。
紧接着,文件可能会再次打开 (4),并且正在执行其他操作。
到目前为止,我还没有注意到 fflush(在 fclose 上调用)不会写入文件系统,而只会写入中间缓冲区。可能是因为 3) 和 4) 之间的时间太短,并且从 2) 的更改尚未写入光盘,所以当我用 4) 重新打开时,我得到一个截断的文件,当它再次关闭时会导致这些数据永久丢失?
在这种情况下,我应该在每个文件写入后使用fsync() 吗?
停电时我必须考虑什么?数据损坏与掉电有关的可能性不大。
【问题讨论】:
-
您不能打开、修改、写入临时文件、关闭、刷新、删除原始文件(或移动到备份文件夹)、重命名吗?
-
另外,请确保您正在检查来自
fclose()的返回值。由于它隐式调用fflush()来写入数据,因此它可能会失败,就像任何写入数据的 stdio 调用都可能失败一样。