15

アトミックにバッファをファイルにダンプする方法はありますか?

「原子的に」とは、たとえば誰かが書き込み中にアプリケーションを終了した場合、ファイルを書き込み前または書き込み後の状態にしたいが、破損した中間状態にしたくないということです。

答えが「いいえ」の場合、おそらく非常に小さなバッファーで実行できますか? たとえば、単一の 8 バイト fwrite (x64 プラットフォーム上) で 2 つの結果の int32_t 変数をダンプし、それらの int32 の両方がダンプされるか、またはどちらもダンプされず、そのうちの 1 つだけではないことを確認できますか?

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 に答える