15

有没有办法将缓冲区自动转储到文件中?

我所说的“原子”是指:例如,如果有人在写入期间终止了我的应用程序,我希望文件处于写入之前或之后的状态,而不是处于损坏的中间状态。

如果答案是“否”,那么可能可以用非常小的缓冲区来完成?例如,我可以用单个 8 字节 fwrite 转储 2 个后续 int32_t 变量(在 x64 平台上),并确保这两个 int32 都被转储,或者它们都不转储,而不仅仅是其中一个?

4

1 回答 1

18

我建议写入一个临时文件,然后rename(2)对其进行操作。

ofstream o("file.tmp"); //Write to a temporary file
o << "my data";
o.close();

//Perform an atomic move operation... needed so readers can't open a partially written file
rename("file.tmp", "file.real");
于 2018-11-16T14:46:22.333 回答