setbuf
stdio.h:インデックス への移動
ヘッダーファイル
stdio.h
カテゴリ
入出力ルーチン
プロトタイプ
void setbuf(FILE *stream, char *buf);
説明
ストリームにバッファリングを割り当てます。
setbuf は,自動的に割り当てられたバッファのかわりに,バッファ buf を I/O バッファリングに使用するように設定します。これは,ストリームが開かれた後で使用されます。
buf が NULL の場合,I/O はバッファリングなしになります。そうでない場合は,フルバッファリングになります。バッファは,BUFSIZ バイト長(stdio.h で指定)である必要があります。
リダイレクトされない場合,stdin と stdout はバッファリングなしになります。そうでない場合は,フルバッファリングになります。setbuf は,使用するバッファリングスタイルを変更するために使用できます。
バッファリングなしは,ストリームに書き込まれた文字がただちにファイルまたはデバイスに出力されることを意味します。一方,バッファリングは,文字が蓄積され,ブロック単位で書き込まれることを意味します。
ストリームを開いた直後または fseek を呼び出した直後に setbuf を呼び出さなかった場合,結果は予期できません。ストリームをバッファリングなしに設定した後で setbuf を呼び出すことは正当であり,問題は発生しません。
よくあるエラーの原因として,バッファを自動(ローカル)変数として割り当てた後で,バッファが宣言された関数から戻る前にファイルを閉じ忘れることがあります。
戻り値
なし。
例
#include <stdio.h>
/* BUFSIZ は,stdio.h で定義されています。*/
char outbuf[BUFSIZ];
int main(void)
{
/* 標準出力ストリームにバッファを関連付けます */
setbuf(stdout, outbuf);
/* バッファにいくつかの文字を出力します */
puts("This is a test of buffered output.\n\n");
puts("This output will go into outbuf\n");
puts("and won't appear until the buffer\n");
puts("fills up or we flush the stream.\n");
/* 出力バッファをフラッシュします */
fflush(stdout);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |
+ |