Loose-Info.com

Last Update 2019/12/24


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