Loose-Info.com

Last Update 2019/12/24


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

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

setvbuf([fp], [buf], _IOFBF, BUFSIZ)


setbuf(  引数1  ,  引数2  )

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

(例)
#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"); setbuf(fp, NULL); 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"); setbuf(fp, buf); 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