int fflush( FILE *stream);

パラメータ

stream
FILE構造へのポインタ.

戻り値

fflush はバッファのフラッシュが成功した場合、0を返します。 また、指定されたストリームにバッファがない場合や、読み込み専用に開かれている場合にも0が返される。

注意

fflushがEOFを返した場合、書き込みに失敗してデータが失われた可能性があります。 クリティカルなエラーハンドラを設定する場合、setvbuf関数でバッファリングをオフにするか、ストリームI/O関数の代わりに_open、_close、_writeなどの低レベルI/Oルーチンを使用するのが最も安全です。

Remarks

fflush 関数はストリームをフラッシュします。 ストリームが書き込みモードでオープンされた場合、または更新モードでオープンされ、最後の操作が書き込みであった場合、ストリームバッファの内容は、基礎となるファイルまたはデバイスに書き込まれ、バッファは破棄される。 ストリームが読み込みモードで開かれた場合、またはストリームにバッファがない場合、fflushの呼び出しは何の効果もなく、バッファはすべて保持されます。 fflushの呼び出しは、そのストリームに対するそれ以前のungetcの呼び出しの効果を無効にします。

ストリームがNULLの場合、開いている各ストリームに対するfflushの呼び出しと同じ動作となります。 書き込みモードでオープンされた全てのストリーム、および最後の操作が書き込みであった更新モードでオープンされた全てのストリームがフラッシュされます。 この呼び出しは他のストリームには影響しません。

バッファは通常オペレーティングシステムによって管理され、バッファがいっぱいになったとき、ストリームが閉じられたとき、ストリームを閉じずにプログラムが正常に終了したときなど、データを自動的にディスクに書き込む最適なタイミングが決定されます。 ランタイムライブラリのcommit-to-disk機能により、重要なデータはオペレーティングシステムのバッファではなく、直接ディスクに書き込まれるようになります。 既存のプログラムを書き換えることなく、プログラムのオブジェクトファイルを COMMODE.OBJ とリンクすることで、この機能を有効にすることができます。 作成された実行可能ファイルでは、_flushallの呼び出しにより、すべてのバッファの内容がディスクに書き込まれます。 COMMODE.OBJ の影響を受けるのは _flushall と fflush だけです。

ディスクへのコミット機能の制御については、ストリーム I/O, fopen, _fdopen.

この関数は呼び出し側のスレッドをロックするのでスレッドセーフになります。 ロックしないバージョンについては、_fflush_nolock.

デフォルトでは、この関数のグローバルステートはアプリケーションにスコープされます。 これを変更するには、CRT.

Requirements

Function Required header
fflush <stdio.NETRequirements

FunctionRequired header

追加の互換性情報については、互換性.

// crt_fflush.c// Compile with: cl /W4 crt_fflush.c// This sample gets a number from the user, then writes it to a file.// It ensures the write isn't lost on crash by calling fflush.#include <stdio.h>int * crash_the_program = 0;int main(void){ FILE * my_file; errno_t err = fopen_s(&my_file, "myfile.txt", "w"); if (my_file && !err) { printf("Write a number: "); int my_number = 0; scanf_s("%d", &my_number); fprintf(my_file, "User selected %d\n", my_number); // Write data to a file immediately instead of buffering. fflush(my_file); if (my_number == 5) { // Without using fflush, no data was written to the file // prior to the crash, so the data is lost. *crash_the_program = 5; } // Normally, fflush is not needed as closing the file will write the buffer. // Note that files are automatically closed and flushed during normal termination. fclose(my_file); } return 0;}

を参照してください。

コメントを残す

メールアドレスが公開されることはありません。