Loose-Info.com

Last Update 2019/12/24


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

ファイル・ポインタで参照されるストリームのバッファリングを設定します。

 戻り値1  = setvbuf(  引数1  ,  引数2  ,  引数3  ,  引数4  )

戻り値1 :
int
実行が成功した場合 : 0 エラーが発生した場合 : 0以外
引数1 :
FILE *
ファイル・ポインタ
引数2 :
char *
カレントバッファに代わるバッファへのポインタ
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]