fflush
ストリームをフラッシュします。
int fflush(
FILE *stream
);
パラメーター
- stream
FILE 構造体へのポインター。
戻り値
fflush は、バッファーのフラッシュが正常に行われると 0 を返します。 指定されたストリームにバッファーがない場合や、ストリームが読み取り専用で開いている場合も値 0 を返します。 エラーがある場合は、EOF を返します。
注意
fflush が EOF を返す場合は、書き込みの失敗によりデータが失われている可能性があります。 重大エラーのハンドラーを設定する場合、setvbuf 関数でバッファリングをオフにするか、ストリーム入出力関数ではなく _open、_close、_write などの下位入出力ルーチンを使用するのが最も安全な方法です。
解説
fflush 関数は、ストリームをフラッシュします。 stream に関連付けられたファイルが出力用として開いている場合、fflush はストリームに関連付けられたバッファーの内容をそのファイルに書き込みます。 ストリームが入力用として開いている場合、fflush はバッファーの内容を消去します。 fflush は、stream に対する前回の ungetc の呼び出しの結果をすべて無効にします。 さらに、fflush(NULL) は出力用として開かれたストリームをすべてフラッシュします。 呼び出しの後も、ストリームは開いたままです。 fflush は、バッファリングされていないストリームに対して処理を行いません。
バッファーは、通常、オペレーティング システムは、データは自動的にディスクに書き込む最適なタイミングを決定します保持されます。ストリームが閉じているときは、バッファーがいっぱいになるとき、またはプログラムは、ストリームを閉じずに終了します。 ランタイム ライブラリのディスクのコミット機能を使用すると、重要なデータをオペレーティング システムのバッファーではなく、ディスクに直接書き込むことができます。 プログラムのオブジェクト ファイルを COMMODE.OBJ にリンクすると、既存のプログラムを書き換えずにディスクのコミット機能を有効にできます。 この結果、生成された実行可能ファイルで _flushall が呼び出されると、バッファーの内容がすべてディスクに書き込まれます。 COMMODE.OBJ の影響を受けるのは、_flushall および fflush だけです。
ディスクのコミット機能を制御する方法については、「ストリーム入出力」、「fopen」、および「_fdopen」を参照してください。
この関数は、呼び出し元のスレッドをロックするのでスレッド セーフです。 ロックしないバージョンについては、「_fflush_nolock」を参照してください。
必要条件
機能 |
必須ヘッダー |
---|---|
fflush |
<stdio.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_fflush.c
#include <stdio.h>
#include <conio.h>
int main( void )
{
int integer;
char string[81];
// Read each word as a string.
printf( "Enter a sentence of four words with scanf: " );
for( integer = 0; integer < 4; integer++ )
{
scanf_s( "%s", string, sizeof(string) );
printf( "%s\n", string );
}
// You must flush the input buffer before using gets.
// fflush on input stream is an extension to the C standard
fflush( stdin );
printf( "Enter the same sentence with gets: " );
gets_s( string, sizeof(string) );
printf( "%s\n", string );
}
これはテストです。 これはテストです
FakePre-46857c817b864c49a325af583c947c4b-a5e4324b87c746d58f2e2d62c5b2e4ef