Microsoft 固有の仕様 →
#include <stdio.h>
解説
これらの Microsoft 固有の定数は、開いているファイルに関連付けられているバッファーのフラッシュ先をオペレーティング システムのバッファーとディスクのどちらにするかを指定します。 ディスク コミット モードは、読み出し/書き込みアクセスのモードを指定する文字列 ("r"、"w"、"a"、"r+"、"w+"、"a+") に含まれます。
ディスク コミット モードは次のとおりです。
c
指定されたバッファーのまだ書き込んでいない内容をディスクに書き込みます。 このディスク コミット機能は、fflush 関数または _flushall 関数のどちらかが明示的に呼び出された場合だけ実行されます。 このモードは、重要なデータを扱うときに有効です。 たとえば、fflush または _flushall を呼び出してからプログラムを終了すると、データは必ずオペレーティング システムのバッファーに格納されます。 ただし、ファイルを c オプションで開いていないと、プログラムと共にオペレーティング システムを終了しても、データはディスクに格納されません。n
指定されたバッファーのまだ書き込んでいない内容をオペレーティング システムのバッファーに書き込みます。 オペレーティング システムは、データをキャッシュし、ディスクに書き込む最適なタイミングを判断します。 多くの状況では、この動作によってプログラムの動作が効率的になります。 ただし、銀行の取引や航空券の情報のようにデータの保持が重要な場合は、c オプションの使用を検討してください。 n モードが既定です。注意
c オプションおよび n オプションは、fopen の ANSI 規格ではなく、Microsoft 拡張機能なので、ANSI 互換が必要な場合は使用しないでください。
既存のコードに対するディスク コミット機能の使用
既定では、ライブラリ関数 fflush または _flushall を呼び出すと、オペレーティング システムの管理するバッファーにデータが書き込まれます。 オペレーティング システムは、実際にデータをディスクに書き込む最適なタイミングを判断します。 ランタイム ライブラリのディスク コミット機能を使用すると、重要なデータをオペレーティング システムのバッファーではなく、ディスクに直接書き込むことができます。 既存のプログラムのオブジェクト ファイルを COMMODE.OBJ にリンクすると、プログラムを書き換えずにこの機能を利用できます。
生成される実行可能ファイルでは、fflush を呼び出すと指定のバッファーの内容が直接ディスクに書き込まれ、_flushall を呼び出すとすべてのバッファーの内容がディスクに書き込まれます。 COMMODE.OBJ の影響を受けるのは、この 2 つの関数だけです。
← Microsoft 固有の仕様