総合手引 | セクション 3 | English | Deutsch | オプション |
#include <stdio.h>
通常、すべてのファイルはブロックバッファリングされます。 ファイルに対して最初の入出力操作が発生したとき、 malloc(3) が呼び出されて最適なサイズのバッファが獲得されます。 ( stdout が通常行うように) ストリームが端末を参照する場合は行バッファリングです。 標準エラーストリーム stderr は常にバッファリングなしです。
setvbuf() 関数は、ストリームのバッファリング動作を変更するのに使用できます。 mode パラメータは次の 3 つのマクロのどれかでなくてはなりません。
_IONBF | |
バッファリングなし | |
_IOLBF | |
行バッファリング | |
_IOFBF | |
完全バッファリング | |
size パラメータは、最適サイズのバッファをいつも通りに遅延割当てさせるために 0 に設定できます。 このパラメータが 0 でない場合、バッファリングなしのファイルを除けば、 buf 引数は少なくとも長さが size バイトのバッファを指していなくてはなりません。 このバッファが現在のバッファの代わりに使用されます ( size 引数が 0 でないものの、 buf が NULL の場合、指定サイズのバッファがただちに割り振られ、 クローズ時に解放されます。 これは ANSI C の拡張です。 移植可能コードはサイズが 0 の NULL バッファを使用するはずです)。
setvbuf() 関数はいつでも使用できますが、ストリームが ``アクティブ''な場合に、 (たとえば、入力の切り捨てや出力のフラッシュ等の) 奇妙な副作用を持つことがあります。 移植可能なアプリケーションは、なんらかの 入出力 が実行される前に、 指定された任意のストリームに対してこの関数を一度だけ呼び出すべきです。
他の 3 つの呼び出しは、実際には、 setvbuf() 呼び出しの別名にすぎません。 戻り値がないことを除いて、 setbuf() 関数は以下の呼び出しと厳密に同じです。
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
setbuffer() 関数は、バッファのサイズを呼び出し元が決め、デフォルトの BUFSIZ で決定されるのではないこと以外は同じです。 setlinebuf() 関数は、次の呼び出しと厳密に同じです。
setvbuf(stream, (char *)NULL, _IOLBF, 0);
setlinebuf() 関数は、同等の setvbuf() 呼び出しが返したはずの値を返します。
SETBUF (3) | June 4, 1993 |
総合手引 | セクション 3 | English | Deutsch | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.