arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
fflush()
fflush()

この関数の目的

fflush()は、ファイルをフラッシュ(flush)する。

定義

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

働き

stream が最後の演算が入力でない出力あるは更新ストリームなら、この関数はストリームの書かれていないすべてのデータがファイルに書かれるようにする。 そうでないなら、動作は未定義である。

stream がヌルポインタなら、この関数は上に書かれたような全てのストリームについてこの動作を行う。

返り値はエラーがあれば EOF 、そうでなければ0である。

解説

データの読み書きをするときには、一文字ずつ読み書きされるのではなく、バッファ(buffer)と呼ばれる領域に一時的に溜め込まれ、ある程度のまとまりになってから書くというのが普通である。この作業をバッファリング(buffering)といい、多くの場合この作業を行うほうが処理速度が向上する。 fflush() は、このある程度のまとまりになるのを待たずにバッファの内容を書くという関数である。

fclose() が呼ばれるときにフラッシュが行われるので、普段はこの関数を使う必要はないが、 異常終了したときなどストリームを閉じる暇もない状況もありうるので、不安定な状況であれば使うことがあるかもしれない。

注意点は、入力ストリーム(stdinなど)に対してこの関数を使ったときの動作が定義されていないということである。 入力ストリームに対してこの関数を使っているプログラムも多いが、厳密に言うとこれらは規格に適合していない。 こんな使い方をするのは、入力ストリーム内に残っている、まだ取り込まれていないデータを捨て去るつもりでいることが多い。

フラッシュ(flush)とは光が投射する(flash)とは違うので注意していただきたい。 flush は便所で水を流すということに使われるように、 たまったものを一気に動かすという意味があるので、バッファの内容をストリームに書き込むことに使われるのである。

arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
KC