Share via


fflush

更新 : 2007 年 11 月

ストリームをフラッシュします。

int fflush( 
   FILE *stream 
);

パラメータ

  • stream
    FILE 構造体へのポインタ。

戻り値

fflush は、バッファのフラッシュが正常に行われると 0 を返します。指定されたストリームにバッファがない場合や、ストリームが読み取り専用で開いている場合も値 0 を返します。エラーがある場合は、EOF を返します。

9yky46tz.alert_note(ja-jp,VS.90).gifメモ :

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 );
}

This is a test
This is a test

Enter a sentence of four words with scanf: This is a test
This
is
a
test
Enter the same sentence with gets: This is a test
This is a test

.NET Framework の相当するアイテム

System::IO::FileStream::Flush

参照

参照

ストリーム入出力

fclose、_fcloseall

_flushall

setvbuf