Last Update 2012/07/05
ファイル・ポインタで参照されるストリームのバッファリングを設定します。
setvbuf()を下記の引数(3番目, 4番目)設定で呼び出した場合と等価となります。
setvbuf()を下記の引数(3番目, 4番目)設定で呼び出した場合と等価となります。
setvbuf([fp], [buf], _IOFBF, BUFSIZ)
setbuf( 引数1 , 引数2 )
引数1 :
FILE *
ファイル・ポインタ
引数2 :
char *
カレントバッファに代わるバッファへのポインタ
この引数がNULLの場合、バッファリングなし
この引数が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