HIR-NET Home C言語 運営者 オンラインソフト 運営者著書 CG HIR-NETリンク集

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秒経つと終了。





◆リンクは、ご自由にお張りください。

Copyright © 1988-2017 Hirabayashi Masahide  プライバシーポリシー