この関数の目的
setvbuf()は、バッファのサイズを指定する。
定義
#include <stdio.h> int setvbuf(FILE *stream, char *buf, int mode, size_t size);
働き
この関数は、開かれてからまだ何の操作もされてないストリームに対して使われる。 mode に次の値を渡すことで、 stream がどのようにバッファされるかを決められる。
buf がヌルポインタでなければ、それがバッファを指すポインタとして使われるかもしれない。 size は buf に確保されている領域のサイズである。 buf の中身は決められなくなる。
成功すれば 0 を返し、 mode の値が不正だったり、要求を満たせなかったときは 0 でない値を返す。
解説
この関数は、ストリームのバッファリングに関する設定をするのに使うことができるが、普通のプログラマなら知る必要もない関数である。 というのは、ストリームは何もしないでも最適なバッファリングを行うからである。
完全にバッファするというのは、固定長のバッファが満たされた時点で書くという意味である。
行バッファとは、一行ごとに、つまり改行文字にぶちあたるまでバッファに書き、それをストリームに書くということである。
バッファを行わないというのは、一文字ずつ出力するということである。
バッファに関しては、 fflush() を参照のこと。
この関数を使うと、プログラマが指定する記憶域 buf をバッファとして使わせることもできる。 しかし、この機能がどんなときに役に立つかというと、全く思いつかない。 この記憶域がどういう内容になるかも全く定義されていないので、配列オーバーに気をつけるべし。