fflush() — ファイルへのバッファーの書き込み

フォーマット

#include <stdio.h>
int fflush(FILE *stream);

言語レベル

ANSI

スレッド・セーフ

はい

説明

fflush() 関数は、可能であれば指定された出力 stream に関連付けられたバッファーを空にするようにシステムに命じます。stream が入力に対してオープンである場合、fflush() 関数はすべての ungetc() 関数の効果を取り消します。 呼び出しの後、stream はオープンしたままになります。

streamNULL の場合は、システムはすべてのオープン・ストリームをフラッシュします。
注: ユーザーがストリームをクローズするとき、またはプログラムがストリームをクローズせずに正常終了するときには、システムはバッファーを自動的に削除します。

戻り値

fflush() 関数は、バッファーを正常に削除した場合は値 0 を戻します。 エラーが発生した場合は EOF を戻します。

errno の値は、次のいずれかに設定されます。
意味
ENOTOPEN
ファイルはオープンされていません。
ERECIO
ファイルはレコードの入出力用にオープンされています。
ESTDIN
stdin をオープンできません。
EIOERROR
リカバリー不能な入出力エラーが発生しました。
EIORECERR
リカバリー可能な入出力エラーが発生しました。

fflush() 関数は、type=record でオープンされたファイルではサポートされていません。

次の例はストリーム・バッファーを削除します。
#include <stdio.h>
 
int main(void)
{
   FILE *stream;
   int ch;
   unsigned int result = 0;
 
   stream = fopen("mylib/myfile", "r");
   while ((ch = getc(stream)) != EOF && isdigit(ch))
      result = result * 10 + ch - '0';
   if (ch != EOF)
      ungetc(ch,stream);
 
   fflush(stream);        /* fflush undoes the effect of ungetc function */
   printf("The result is: %d¥n", result);
   if ((ch = getc(stream)) != EOF)
      printf("The character is: %c¥n", ch);
}