HIR-NET Home
運営者
オンラインソフト
運営者著書
CG
HIR-NETリンク集
C言語辞典
fflush関数
fflush function
語源
file flush(ファイル押出)
分類
C/C++標準ライブラリ/関数/入出力関数/バッファ関数
名称
フラッシュ関数(flush function)
関連
setvbuf関数, fclose関数, ungetc関数
解説
fflush関数は、ストリームのバッファをフッラシュ(flush; 押し出す)させる関数です。ストリーム *stream が NULL(空ポインタ)の場合はオープンしているすべてのストリームのバッファをフラッシュさせます。ストリーム*stream が出力、及び、更新モードで直前の操作が入力でない場合のフラッシュの動作は、バッファ内のまだ書き出されていないすべてのデータをファイルに書き出すためにホスト環境に引き渡すことです。
関数原型宣言ヘッダ
<stdio.h>
関数原型宣言例
ストリーム
↓
int fflush(FILE *stream);
↓
0 :成功
EOF:失敗
関数返却値
①成功した場合は 0 を返します。
②エラーが検出された場合は EOF(一般に -1)を返します。
注意
入力や更新モードでの直前の操作が出力でない場合のストリームの動作は未定義です。例えば、処理系によっては直前の ungetc関数の操作を取り消すこともあります。
関数定義例
_streams は処理系によって異なる識別子です。
// fflush.c
#include <stdio.h> // FILE,_stream,EOF,FOPEN_MAX,NULL,SEEK_CUR,fseek
int fflush( // フラッシュ関数 File FLUSH
// 0:成功
// EOF:失敗
FILE *stream) // ストリーム
{
int i;
int e=0;
if(stream!=NULL)
{ // 現在位置
if(fseek(stream,0L,SEEK_CUR))return EOF;
return 0;
}
for(i=0;i<FOPEN_MAX;i++) // 最大オープン数
{
if(_streams[i]!=NULL) // オープン中なら
{
if(fseek(_stream[i],0L,SEEK_CUR))e++;
}
} // for
if(e)return EOF; // エラーが検出された
return 0;
} // fflush
バッファリングとフラッシュ
// fflush1.c
#include <stdio.h> // stdout,BUFSIZ,fflush,setbuf,printf
#include <stdlib.h> // EXIT_SUCCESS
#include <time.h> // clock_t,CLOCKS_PER_SEC,clock
int main(void)
{
void wait(int sec);
char buf[BUFSIZ]; // バッファ宣言
setbuf(stdout,buf); // バッファ設定:標準出力を完全バッファリング
printf("ABC\n");wait(10); // 10秒停止
fflush(stdout);wait(10); // 10秒停止
return EXIT_SUCCESS;
} // main
void wait( // 時間待関数
int sec) // 秒数
{
clock_t start_time=clock(); // 開始時
while((clock()-start_time)/CLOCKS_PER_SEC<sec);
} // wait
実行結果
10秒間、出力がないが、10秒経つと ABC⏎を出力し、その後10秒経つと終了。
HIR-NET Home
運営者
オンラインソフト
運営者著書
CG
HIR-NETリンク集
◆リンクは、ご自由にお張りください。
Copyright © 1988-2017 Hirabayashi Masahide プライバシーポリシー