通常の IO API を使用して 1 つのファイルを読み書きすると、書き込みはブロック単位でアトミックであることが保証されます。つまり、私の書き込みが 1 つのブロックのみを変更する場合、オペレーティング システムは、ブロック全体が書き込まれるか、まったく書き込まれないことを保証します。
メモリ マップト ファイルで同じ効果を得るにはどうすればよいですか?
メモリ マップされたファイルは単なるバイト配列であるため、バイト配列を変更すると、オペレーティング システムはいつ書き込みが「完了」したと見なされるかを知る方法がないため、(可能性が低いとしても) メモリをスワップ アウトする可能性があります。ブロック書き込み操作の途中で、実際には半分のブロックを書き込みます。
ある種の「クリティカル セクションに入る/残す」、または書き込み中にファイルのページをメモリに「固定」する方法が必要です。そのようなものは存在しますか?もしそうなら、それは一般的なPOSIXシステムとWindowsで移植可能ですか?