ファイルアクセス関数fflush
ヘッダ #include "stdio.h"
形 式 int fflush(FILE *stream);
機 能 streamが出力ストリームまたは直前の操作が入力でない更新ストリームを指すとき、fflush関数はそのストリームでまだ書き込まれていないデータをホスト環境に引き渡し、ホスト環境がそのデータをファイルに書き込む。それ以外のときの動作は、未定義である。
streamが空ポインタのとき、fflush関数は、フラッシュ動作が定義されるすべてのストリームに対してこの動作を行う。
返却値 fflush関数は、書込みエラーが発生すればEOFを返し、そうでなければ0を返す。
【使用例1】
/* 2度目以降の%c指定を正常に行う(使用できるかどうかは各自確認してください) */
#include
int main(void)
{
char a;
printf("文字の入力 ");
scanf("%c",&a);
/* fflushを省くと、2回目以降の文字入力が正常に行われません。*/
printf("文字の入力 ");
fflush(stdin);
scanf("%c",&a);
return 0;
}
【実行結果】
2度続けて文字入力ができる
【使用例2】
/* setbuf関数で出力バッファをユーザバッファに指定した例 (処理系依存)*/
#include
int main(void)
{
char buf[BUFSIZ];
long l;
/* 出力バッファをユーザバッファに指定 */
setbuf(stdout,buf);
/* 文字列をユーザバッファを使って出力 */
printf("ABCDEFGHIJKLMN");
/* 出力しない。そのことを確認するために時間稼ぎの空ループ */
for (l=0; l<1000000000; l++);
/* fflushで初めて出力 */
fflush(stdout);
return 0;
}
【実行結果】
ABCDEFGHIJKLMN ※しばらくたった後出力
(stdin、stdoutについて)
stdin は「標準入力ストリームポインタ」、stdoutは「標準出力ストリームポインタ」です。
「ストリーム」とは、Cプログラムとファイルを結ぶデータの流れです。ファイルがオープンされると、Cプログラムとファイルとの間にストリームが確立されます。このストリーム上に入力バッファと出力バッファという、緩衝記憶が置かれるのです。つまり、入出力を行うにはファイルオープンによって、このストリームを確立しなければなりません。
Cでは入出力デバイスもファイルとして扱います。しかし、キーボードやスクリーンを、入出力の動作をするためにオープンするのは面倒です。そのため、Cプログラムは実行されると、自動的にオープンする特別なファイルを用意しています。これが、標準ストリームで、オープン時に取得したFILEポインタを下記の「stdin〜stdprn」に格納します。
ストリームポインタ 機能 デバイス
stdin 標準入力 通常はキーボード
stdout 標準出力 通常はスクリーン
stderr 標準エラー出力 通常はスクリーン
stdaux(処理系依存) 標準補助入出力 補助入出力ポート
stdprn(処理系依存) 標準プリンタ出力 プリンタ
getchar、putchar、gets、puts、scanf、printfなどは、この標準入出力に対して入出力を行います。
[Quote]:http://www.bohyoh.com/CandCPP/C/Library/fflush.htmlhttp://www9.plala.or.jp/sgwr-t/lib/fflush.html