Last Update 2012/07/05
ファイル・ポインタで参照されるストリームのバッファリングを設定します。
戻り値1 = setvbuf( 引数1 , 引数2 , 引数3 , 引数4 )
戻り値1 :
int
実行が成功した場合 : 0
エラーが発生した場合 : 0以外
引数1 :
FILE *
ファイル・ポインタ
引数2 :
char *
カレントバッファに代わるバッファへのポインタ
NULLの場合はサイズが引数4であるバッファが割り当てられ、使用後リリースされます。
NULLの場合はサイズが引数4であるバッファが割り当てられ、使用後リリースされます。
引数3 :
int
バッファリングのタイプ
_IONBF : バッファリングなし
_IOLBF : 行バッファリング
_IOFBF : フルバッファリング
引数4 :
size_t
バッファサイズ
(例)
#include <stdio.h>
int main ()
{
FILE *fp;
char s[10] = "";
char buf[10];
fp = fopen("test_fopen_w.txt", "w");
fputs("123456789", fp);
fclose(fp);
fp = fopen("test_fopen_w.txt", "r");
setvbuf(fp, NULL, _IONBF, 0);
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");
setvbuf(fp, NULL, _IOFBF, 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);
printf("※バッファサイズが読み込み文字総数未満\n", s);
fp = fopen("test_fopen_w.txt", "r");
setvbuf(fp, buf, _IOFBF, 5);
printf("バッファ内部(読み取り前) : [%s]\n", buf);
fscanf(fp, "%5s", s);
printf("バッファサイズ5文字 --- 読み取り結果(5文字) : %s\n", s);
printf("バッファ内部(5文字読み取り後) : [%s]\n", buf);
printf("バッファリングされたデータを消去 : %d (成功 = 0)\n", fpurge(fp));
fscanf(fp, "%s", s);
printf("バッファサイズ5文字 --- 読み取り結果(最終) : %s\n", s);
printf("バッファ内部 : [%s]\n\n", buf);
fclose(fp);
buf[0] = '\0';
fp = fopen("test_fopen_w.txt", "r");
setvbuf(fp, buf, _IOFBF, 4);
printf("※バッファサイズが読み込み文字総数未満\n", s);
printf("バッファ内部(読み取り前) : [%s]\n", buf);
fscanf(fp, "%5s", s);
printf("バッファサイズ4文字 --- 読み取り結果(5文字) : %s\n", s);
printf("バッファ内部(5文字読み取り後) : [%s]\n", buf);
printf("バッファリングされたデータを消去 : %d (成功 = 0)\n", fpurge(fp));
fscanf(fp, "%s", s);
printf("バッファサイズ4文字 --- 読み取り結果(最終) : %s\n", s);
printf("バッファ内部 : [%s]\n", buf);
fclose(fp);
return 0;
}
実行結果
バッファリングなし --- 読み取り結果(3文字, バッファ消去前) : 123
バッファリングされたデータを消去 : 0 (成功 = 0)
バッファリングなし --- 読み取り結果(バッファ消去後) : 456789
※バッファサイズが読み込み文字総数以上
バッファリングあり --- 読み取り結果(3文字, バッファ消去前) : 123
バッファリングされたデータを消去 : 0 (成功 = 0)
バッファリングあり --- 読み取り結果(バッファ消去後) : 123
※バッファサイズが読み込み文字総数未満
バッファ内部(読み取り前) : []
バッファサイズ5文字 --- 読み取り結果(5文字) : 12345
バッファ内部(5文字読み取り後) : [12345]
バッファリングされたデータを消去 : 0 (成功 = 0)
バッファサイズ5文字 --- 読み取り結果(最終) : 6789
バッファ内部 : [67895]
※バッファサイズが読み込み文字総数未満
バッファ内部(読み取り前) : []
バッファサイズ4文字 --- 読み取り結果(5文字) : 12345
バッファ内部(5文字読み取り後) : [56785]
バッファリングされたデータを消去 : 0 (成功 = 0)
バッファサイズ4文字 --- 読み取り結果(最終) : 9
バッファ内部 : [96785]