setbuf関数は,指定されたファイルがオープンされた後,ただし I/O 操作が実行される前に使用することができます。
buffer が NULL ポインタである場合,この呼び出しは,同じ file_ptr,NULL の
buffer ポインタ, _IONBF のバッファリング・タイプ (バッファリングなし),およびバッファ・サイズ 0 を指定する
setvbuf呼び出しと等価です。
buffer が NULL ポインタでない場合,この呼び出しは,同じ file_ptr,同じ
buffer ポインタ, _IOFBF のバッファリング・タイプ,および値 BUFSIZ (
<stdio.h>に定義) で指定されるバッファ・サイズを指定する
setvbuf呼び出しと等価です。したがって,
setbufの呼び出しで使用する buffer 引数を割り当てるときには BUFSIZ を使用するようにします。次に例を示します。
#include <stdio.h>
.
.
.
char my_buf[BUFSIZ];
.
.
.
setbuf(stdout, my_buf);
.
.
.
|
ユーザ・プログラムは,ストリームに対して I/O が実行された後には, buffer の内容に依存してはなりません。 HP C RTL は,どの I/O 操作についても,
buffer を使用する場合と使用しない場合があります。
もともと
setbuf関数は,古いバージョンの UNIX のシステム・デフォルト・バッファの代わりに,プログラマが大きなバッファを割り当てられるようにすることを目的としていました。現在の C の実装では,デフォルト・バッファ・サイズが大きいため,この関数はほとんどのケースでは不要です。
setbuf関数は,ANSI C 標準では,古いプログラムとの互換性のために残されています。新規のプログラムでは,代わりに
setvbufを使用するようにしてください。この関数では,プログラマはコンパイル時ではなく実行時にバッファ・サイズをバインドすることができますし,テスト可能な結果値が返されます。