SETBUF
Section: C Library Functions (3)
索引
jman
BSD mandoc
索引
名称
setbuf
setbuffer
setlinebuf
setvbuf
- ストリームバッファリング操作
索引
ライブラリ
Lb libc
索引
書式
In stdio.h
Ft void
Fn setbuf FILE *stream char *buf
Ft void
Fn setbuffer FILE *stream char *buf int size
Ft int
Fn setlinebuf FILE *stream
Ft int
Fn setvbuf FILE *stream char *buf int mode size_t size
索引
解説
利用できる 3 タイプのバッファリングは、バッファリングなし、
ブロックバッファリング、および行バッファリングです。
出力ストリームがバッファリングなしの場合、情報は書き込まれると
ただちに書き込み先ファイルや端末に表示されます。
出力ストリームがブロックバッファリングの場合、
多数のキャラクタが蓄積されブロックとして書き込まれます。
出力ストリームが行バッファリングの場合、改行が出力されるか、
または端末デバイスにアタッチされた任意のストリーム
(通常は stdin) から入力が読み込まれるまで、キャラクタが蓄えられます。
関数
fflush(3)
を使用して、早めにブロックの出力を強制することもできます
(
fclose(3)
を参照)。
通常、すべてのファイルはブロックバッファリングされます。
ファイルに対して最初の入出力操作が発生したとき、
malloc(3)
が呼び出されて最適なサイズのバッファが獲得されます。
(
stdout
が通常行うように)
ストリームが端末を参照する場合は行バッファリングです。
標準エラーストリーム
stderr
は常にバッファリングなしです。
Fn setvbuf
関数は、ストリームのバッファリング動作を変更するのに使用できます。
Fa mode
パラメータは次の 3 つのマクロのどれかでなくてはなりません。
- _IONBF
-
バッファリングなし
- _IOLBF
-
行バッファリング
- _IOFBF
-
完全バッファリング
Fa size
パラメータは、最適サイズのバッファをいつも通りに遅延割当てさせるために
0 に設定できます。
このパラメータが 0 でない場合、バッファリングなしのファイルを除けば、
Fa buf
引数は少なくとも長さが
Fa size
バイトのバッファを指していなくてはなりません。
このバッファが現在のバッファの代わりに使用されます
(
Fa size
引数が 0 でないものの、
Fa buf
が
NULL
の場合、指定サイズのバッファがただちに割り振られ、
クローズ時に解放されます。
これは ANSI C の拡張です。
移植可能コードはサイズが 0 の
NULL
バッファを使用するはずです)。
Fn setvbuf
関数はいつでも使用できますが、ストリームが ``アクティブ''な場合に、
(たとえば、入力の切り捨てや出力のフラッシュ等の)
奇妙な副作用を持つことがあります。
移植可能なアプリケーションは、なんらかの
入出力
が実行される前に、
指定された任意のストリームに対してこの関数を一度だけ呼び出すべきです。
他の 3 つの呼び出しは、実際には、
Fn setvbuf
呼び出しの別名にすぎません。
戻り値がないことを除いて、
Fn setbuf
関数は以下の呼び出しと厳密に同じです。
"setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);"
Fn setbuffer
関数は、バッファのサイズを呼び出し元が決め、デフォルトの
BUFSIZ
で決定されるのではないこと以外は同じです。
Fn setlinebuf
関数は、次の呼び出しと厳密に同じです。
"setvbuf(stream, (char *)NULL, _IOLBF, 0);"
索引
戻り値
Fn setvbuf
関数は正常終了すると 0 を返します。
要求が受け入れられない場合は
EOF
を返します
(ストリームはこの場合でも依然として機能していることに注意してください)。
Fn setlinebuf
関数は、同等の
Fn setvbuf
呼び出しが返したはずの値を返します。
索引
関連項目
fclose(3),
fopen(3),
fread(3),
malloc(3),
printf(3),
puts(3)
索引
規格
Fn setbuf
関数と
Fn setvbuf
関数は
St -isoC
に適合しています。
索引
バグ
Fn setbuffer
関数と
Fn setlinebuf
関数は、
BSD 4.2
より前のバージョンの
BSD へ移植可能ではありません。
BSD 4.2
システムと
BSD 4.3
システムでは、
Fn setbuf
は、最適ではないバッファサイズを常に使用するので、避けてください。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- 関連項目
-
- 規格
-
- バグ
-
Time: 07:07:06 GMT, January 12, 2009