私たちは、警告なしに電源が切断された場合に、システム (現在は Windows 7 Embedded で実行中) がどのように動作するかをテストしています。私たちの PC は意図的に UPS では動作しません。
あるテストでは、メモ帳で簡単なテキスト ファイルを作成し、テキストを追加してファイルを保存し、数秒後に電源をオフにしました (つまり、正常なシャットダウンではありません)。
電源を入れ直すと、ファイルへの変更は保存されていませんでした。
さらに調査してみると、Crucial MX200 SSD で「デバイスで書き込みキャッシュを有効にする」がチェックされていることがわかりました。
後チェックを外すその設定で、ディスク書き込みがすぐに行われ、キャッシュされないと仮定して、再度テストを試みました。
しかし、以前と同様に、ファイルを「保存」してから数秒後に電源を切ると、ファイルへの変更は保存されませんでした。
更新 - 2 つの異なるブランドの SSD と HDD を使用してこの動作をテストしましたが、動作は同じでした。書き込みキャッシュが無効にならないだけのようです...
他に何か見落としているものはありますか?
答え1
問題が特定のブランドやドライブの種類に固有のものではないことが確認できたので、Windows の動作 (この場合は Windows 7) が原因ではないかと疑いました。
さらに検索してみると、次の投稿が見つかりました: Windows はどのくらいの頻度で書き込みキャッシュをフラッシュしますか?
これにより、Windows の内部ファイル キャッシュを完全にフラッシュするには 8 秒かかることが確認されます。
回避策は、ここに示すようにソースコードを更新することでした -https://jeffpar.github.io/kbarchive/kb/066/Q66052/。
を使用してファイルを開く際にfopen
、最後のオプションとして Microsoft 固有のモード オプション "c" を含め、 を_flushall()
呼び出す直前に を使用しましたfclose()
。