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

関連情報