原子写入linux上的文件

时间:2015-03-25 16:48:08

标签: c++ linux file file-writing

有没有办法将缓冲区转储到文件原型?

“原子地”我的意思是:如果有人在写作期间终止我的应用程序,我希望文件处于写入前或写入状态,但不是处于损坏的中间状态。

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

2 个答案:

答案 0 :(得分:6)

我建议先写入一个临时文件,然后对其进行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");

答案 1 :(得分:0)

可能值得检查signal.h(标准c库),以处理这样的情况。请记住,穿线可能需要一些额外的安全防护装置。

相关问题