arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
setvbuf()
setvbuf()

この関数の目的

setvbuf()は、バッファのサイズを指定する。

定義

	#include <stdio.h>
	int setvbuf(FILE *stream, char *buf, int mode, size_t size);

働き

この関数は、開かれてからまだ何の操作もされてないストリームに対して使われる。 mode に次の値を渡すことで、 stream がどのようにバッファされるかを決められる。

  • _IOFBF なら完全にバッファする。
  • _IOLBF なら行バッファを行う。
  • _IONBF ならバッファを行わない。

buf がヌルポインタでなければ、それがバッファを指すポインタとして使われるかもしれない。 sizebuf に確保されている領域のサイズである。 buf の中身は決められなくなる。

成功すれば 0 を返し、 mode の値が不正だったり、要求を満たせなかったときは 0 でない値を返す。

解説

この関数は、ストリームのバッファリングに関する設定をするのに使うことができるが、普通のプログラマなら知る必要もない関数である。 というのは、ストリームは何もしないでも最適なバッファリングを行うからである。

完全にバッファするというのは、固定長のバッファが満たされた時点で書くという意味である。

行バッファとは、一行ごとに、つまり改行文字にぶちあたるまでバッファに書き、それをストリームに書くということである。

バッファを行わないというのは、一文字ずつ出力するということである。

バッファに関しては、 fflush() を参照のこと。

この関数を使うと、プログラマが指定する記憶域 buf をバッファとして使わせることもできる。 しかし、この機能がどんなときに役に立つかというと、全く思いつかない。 この記憶域がどういう内容になるかも全く定義されていないので、配列オーバーに気をつけるべし。

arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス >
KC