fflush() — ファイルへのバッファーの書き込み
フォーマット
#include <stdio.h>
int fflush(FILE *stream);
言語レベル
ANSI
スレッド・セーフ
はい
説明
fflush() 関数は、可能であれば指定された出力 stream に関連付けられたバッファーを空にするようにシステムに命じます。stream が入力に対してオープンである場合、fflush() 関数はすべての ungetc() 関数の効果を取り消します。 呼び出しの後、stream はオープンしたままになります。
stream が NULL の場合は、システムはすべてのオープン・ストリームをフラッシュします。
注: ユーザーがストリームをクローズするとき、またはプログラムがストリームをクローズせずに正常終了するときには、システムはバッファーを自動的に削除します。
戻り値
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);
}