ファイル/ファイルシステムの操作の順序が保証されているかどうかを知りたいと思います。ソフトウェアのクラッシュや例の停電のために -ファイルの操作順序の保証
がlseek(fd,pos_a,SEEK_SET);
write(fd,data_a,size_a); //< - Operation A
lseek(fd,pos_b,SEEK_SET);
write(fd,data_b,size_b); //< - Operation B
lseek(fd,pos_c,SEEK_SET);
write(fd,data_c,size_c); //< - Operation C
このような私は、ファイルAの更新を行うことを、B、Cそして、いくつかの障害が発生する可能性があります。
は、私は、ファイルfoo.dat
を持っていると私は、次のようにそれを更新し考えてみましょう。
実行された操作が同じ順序で行われるという保証はありますか?
すなわち、「AとC」のみ「B」のようなものか、「A」または「AとB」または「AとBとC」でもないような状況のいずれかがないだろうと。
私がAとBの間で呼び出すと、fsync(fd)
とAとCの間で同じであることがわかりますが、 も実際にはファイルシステム上にあることが保証されています。
私はデータの緩みに慣れていませんが、むしろその一貫性については気にしません。
POSIX規格では、アウトオブオーダー実行が保証されていますか?
ので:どのような保証があるよう
- ?
- POSIXプラットフォームでは?
- Windowsプラットフォームでは?
- もし私が持つことができる保証がありません(
fsync
以外)?
私はあなたの答えは、私はこの文書を読んで作られたことを追加したい:http://developer.postgresql.org/pgdocs/postgres/ wal.htmlと "魔法"の解決策がないことを理解する。私はちょうどfsyncをスマートな方法で使う必要があります。 – Artyom