TOP - C言語 - stdio.h - setbuffer()

ファイル・ポインタで参照されるストリームのバッファリングを設定します。
setvbuf()を下記の引数設定(3番目)で呼び出した場合と等価となります。
setvbuf([fp], [buf], _IOFBF, [size])


setbuffer(引数1 , 引数2 , 引数3)

引数1   : FILE *
          ファイル・ポインタ
引数2   : char *
          カレントバッファに代わるバッファへのポインタ
          この引数がNULLの場合、バッファリングなし
引数3   : int
          バッファサイズ

(例)
#include <stdio.h>

int main ()
{
    FILE *fp;
    char s[10] = "";
    char buf[BUFSIZ];

    fp = fopen("test_fopen_w.txt", "w");
    fputs("123456789", fp);
    fclose(fp);

    fp = fopen("test_fopen_w.txt", "r");
    setbuffer(fp, NULL, BUFSIZ);
    fscanf(fp, "%3s", s);
    printf("バッファリングなし --- 読み取り結果(3文字, バッファ消去前) : %s\n", s);
    printf("バッファリングされたデータを消去 : %d (成功 = 0)\n", fpurge(fp));
    fscanf(fp, "%s", s);
    printf("バッファリングなし --- 読み取り結果(バッファ消去後) : %s\n\n", s);
    fclose(fp);

    fp = fopen("test_fopen_w.txt", "r");
    setbuffer(fp, buf, BUFSIZ);
    fscanf(fp, "%3s", s);
    printf("※バッファサイズが読み込み文字総数以上\n", s);
    printf("バッファリングあり --- 読み取り結果(3文字, バッファ消去前) : %s\n", s);
    printf("バッファリングされたデータを消去 : %d (成功 = 0)\n", fpurge(fp));
    fscanf(fp, "%s", s);
    printf("バッファリングあり --- 読み取り結果(バッファ消去後) : %s\n\n", s);
    fclose(fp);

    return 0;
}

実行結果
バッファリングなし --- 読み取り結果(3文字, バッファ消去前) : 123
バッファリングされたデータを消去 : 0 (成功 = 0)
バッファリングなし --- 読み取り結果(バッファ消去後) : 456789

※バッファサイズが読み込み文字総数以上
バッファリングあり --- 読み取り結果(3文字, バッファ消去前) : 123
バッファリングされたデータを消去 : 0 (成功 = 0)
バッファリングあり --- 読み取り結果(バッファ消去後) : 123


Copyright(C) 2006-2012 CLAYPOT. All Rights Reserved.