C言語 入出力バッファリングの設定 - stdio.h - [ setbuf, setvbuf ]

2008.10.03 Friday | by LRESULT


出力バッファリングの設定には、setbuf()とsetvbuf()を使用します。

バッファリングとは、一時的にメモリ内に保存しておくことで、
バッファリングする事で、細切れのデータを1つに繋げて高速化出来るなどのメリットがあります。


setbuf
書式 void setbuf( FILE *fp, char *buf )
機能 入出力バッファリングの設定
引数 FILE *fp : ファイル(ストリーム)ポインタ
char *buf : バッファの格納先
NULLの場合は、バッファリングを実施しない。
バッファの格納先サイズには、BUFSIZ が定義されています。
戻り値 なし



setvbuf
書式 int setvbuf( FILE *fp, char *buf, int mode, size_t size )
機能 入出力バッファリングの詳細設定
引数 FILE *fp : ファイル(ストリーム)ポインタ
char *buf : バッファの格納先
(NULLの場合は、バッファリングを実施しない。)
int mode : バッファリングのモード
size_t size : バッファの格納先サイズ
戻り値 成功すると、0を返し、
失敗すると、0以外を返します。



バッファリングのモード
_IOFBF 完全なバッファリングを行う
_IOLBF 行単位でのバッファリングを行う
_IONBF バッファリングを行わない ( バッファやバッファサイズは無視されます )


setbuf()は、setvbuf()の機能の一部を取り出した関数です。
  バッファリング無しや、完全なバッファリングは機能として同じものです。





サンプルコード
バッファリングを行わないようにした後、ファイルを読み込み、
その後、バッファリングONして、もう一度ファイルを読み込んでみます。
#include <stdio.h>

int main(void)
{
  FILE *fp;
  char *fname = "test.txt";
  char buf[BUFSIZ];
  int c;

  fp = fopen( fname, "r" );
  if( fp == NULL ){
    printf( "%sファイルが開けません¥n", fname );
    return -1;
  }

  setbuf( fp, NULL );
  while( (c = fgetc( fp )) != EOF ){
    printf( "%c", c );
  }

  rewind( fp );
  setbuf( fp, buf );
  while( (c = fgetc( fp )) != EOF ){
    printf( "%c", c );
  }

  fclose( fp );
  return 0;
}




結果
「test.txt」の内容
最終的な表示はどちらも変わりません。
バッファリングを行う設定のほうが効率的に読み込む事が出来ます。

カテゴリ:C言語 stdio.h | 23:03 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/62

トラックバック