#include <stdio.h> void setbuf(FILE *stream, char *buf); void setbuffer(FILE *stream, char *buf, size_t size); void setlinebuf(FILE *stream); int setvbuf(FILE *stream, char *buf, int mode, size_t size);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
setbuffer(),
setlinebuf():
Since glibc 2.19:
_DEFAULT_SOURCE
Glibc 2.19 and earlier:
_BSD_SOURCE
通常、ファイルはすべて block buffered である。ストリームがターミナルを参照している場合 (stdout は通常ターミナルを参照している)、ストリームは line buffered となる。標準エラー出力 stderr はデフォルトでは常に unbuffered である。
setvbuf() 関数は、オープンしている任意のストリームに対してバッファーを変更できる。 引数 mode は、次の 3 つのマクロのうちいずれかである:
unbuffered のファイルを除き、 buf 引数は size バイト以上の大きさのバッファーを指していなければならない。このバッファーは現在の バッファーの代わりに用いられる。もし、引数 buf が NULL ならば、モードだけが変更される。 新しいバッファーは次に読み書きした際に割り当てられる。 setvbuf() 関数は、ストリームをオープンした後、 そのストリームに対して何らかの操作をする前にのみ使用できる。
他の 3 つの関数は setvbuf() の呼び出しに単純に置き換えることができる。 setbuf() 関数は、
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
と全く同等だし、 setbuffer() 関数は、バッファーサイズがデフォルト値 BUFSIZ ではなく引数で与えられる点以外は同じである。 setlinebuf() 関数は以下と同じである。
setvbuf(stream, NULL, _IOLBF, 0);
インターフェース | 属性 | 値 |
setbuf(), setbuffer(), setlinebuf(), setvbuf() | Thread safety | MT-Safe |
#include <stdio.h>
int
main(void)
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}