サイトマップ / C言語講座>出入り口>総目次>目次:ファイル>バッファリング有り無し||デモ用
[二分木探索(バイナリサーチ)]←このソース→[起動後の経過時間]
/* 標準ライブラリ関数 setbuf( ) について学びます。
ストリームとは、ソフトウエアが文字を読み書きする対象のことです。ストリームは、ファイルか、キーボードかコンソールになります。setbuf( ) は、ストリームに対し、バッファリングするかしないか指定します。バッファリングしないと、ストリームに対し、文字を一字づつ読み込みまたは書き込みます。バッファリングすると、書き込みに対しては、文字を受け取り、バッファが満杯になると書き込みます。読み込みに対しては、文字を渡し、バッファが空になると、満たします。
fopen( ) は、ファイルを開いて、このファイルのストリームにバッファを、自動的に割り当て、バッファリングした状態に設定します。バッファのサイズは、記号定数BUFSIZE と見なされます。BUFSIZE は stdio.h の中で定義されています。例えば、あるコンパイラでは、”#define BUFSIZE 1024”となっていました。'1024' という値については、処理系により異なります。'512' としているのもありました。
標準ライブラリ関数、setbuf( ) について説明します。
#include <stdio.h>
void setbuf(FILE *fp, char *buff);
例:setbuf(fp, buff);
実行結果 戻り値
成功 0
失敗 0 以外の値
重要:setbuf( ) の呼び出しは、ストリーム ( ファイル ) を開いてから、読み込みや書き込みをする前に行います。
buff で指定されるサイズのバッファリングをするようにストリームを設定します。バッファリングしないように設定するには、buff に NULL を指定します。
まず最初にこのファイルを開いて下さい。コンパイルしたら、"Text.html"の名前を"Text.txt"に変更し、同じフォルダーに置いてから実行してみて下さい。
今回のソースプログラムでは、同じフォルダの中にある "Test.txt" を読み込み専用 ( "r" ) で開き、バッファリングなしで、ファイルの中身を表示し、次いで、ファイルを閉じ、再度ファイルを開き、今度は LEN_BUFF のサイズで、バッファリングして、ファイルの中身を表示します。 */
#include <stdio.h>
#include <stdlib.h> /* malloc( ) で必要 */
#define LEN_BUFF 512 /* 変更するバッファのサイズ */
void main(void);
void main(void)
{
FILE *fp;
int c;
char *buff;
if ((fp = fopen("Text.txt", "r")) == NULL) {
fprintf(stderr, "ファイルを開くのに失敗しました!\n");
exit (2); /* 失敗したらシェルに戻る */
}
setbuf(fp, NULL);
printf(" ************ バッファリング無し ************\n" );
while ((c = fgetc(fp)) != EOF) /* EOF に達するまで、 */
putchar(c); /* ファイルの中身を1字ずつ表示 */
fclose(fp);
if ((fp = fopen("Test.txt", "r")) == NULL) {
fprintf(stderr, "ファイルを開くのに失敗しました!\n");
exit (2); /* 失敗したらシェルに戻る */
}
/* バッファ用のメモリを割り付け */
buff = (char *)malloc(LEN_BUFF);
setbuf(fp, buff);
printf(" ************ バッファリング有り ************\n");
while ((c = fgetc(fp)) != EOF) /* EOF に達するまで、 */
putchar(c); /* ファイルの中身を1字ずつ表示 */
fclose(fp);
free(buff); /* malloc( ) で割り付けられたメモリを解放 */
}
|
/*
while ((c = fgetc(fp)) != EOF)
このようなC特有の表現に、慣れてきましたでしょうか。'=' 演算子の優先順位は、'!=' 演算子より低いので、'c = fgetc(fp)' を囲むカッコは必要です。 */
[二分木探索(バイナリサーチ)]←このソース→[起動後の経過時間]
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−