mic*_*ael 2 c linux file stdio
在 Linux(Ubuntu 平台)设备上,我使用一个文件来保存关键任务数据。
有时(大约 10,000 个案例中发生一次),文件会因不明原因而损坏。特别是,文件被截断(而不是一些 kbyte,它只有大约 100 个字节)。
现在,按照软件的顺序
紧接着,文件可能会再次打开 (4),并且正在执行其他操作。
到目前为止,我还没有注意到fflush
(被调用fclose
)不会写入文件系统,而只会写入中间缓冲区。可能是因为 3) 和 4) 之间的时间太短,并且 2) 的更改尚未写入磁盘,所以当我用 4) 重新打开时,我得到一个截断的文件,当它再次关闭时会导致永久丢失那些数据?
fsync()
在这种情况下我应该在每次文件写入后使用吗?
停电需要考虑什么?数据损坏不太可能与断电有关。
fwrite
有时写入到内部缓冲器中的第一,然后(在fflush
或fclose
或当缓冲器满)调用OS功能write
。
操作系统也在做一些缓冲,写入设备可能会延迟。
fsync
确保操作系统正在将其缓冲区写入设备。
在您打开-写入-关闭的情况下,您不需要fsync
. 操作系统知道文件的哪些部分尚未写入设备。因此,如果第二个进程想要读取文件,操作系统知道它在内存中有文件内容,并且不会从设备读取文件内容。
当然,在考虑停电时,最好(取决于具体情况)fsync
确保将文件内容写入设备(正如 Andrew 指出的那样,这并不一定意味着将内容写入磁盘) ,因为设备本身可能会进行缓冲)。
归档时间: |
|
查看次数: |
3708 次 |
最近记录: |