setvbuf
stdio.h:インデックス への移動
ヘッダーファイル
stdio.h
カテゴリ
入出力ルーチン
プロトタイプ
int setvbuf(FILE *stream, char *buf, int type, size_t size);
説明
ストリームにバッファリングを割り当てます。
setvbuf は,自動的に割り当てられたバッファのかわりに,バッファ buf を I/O バッファリングに使用するように設定します。これは,ストリームが開かれた後で使用されます。
buf が NULL の場合は,malloc を使ってバッファが割り当てられます。割り当てられるバッファの大きさとして size が使用されます。このバッファは,ストリームを閉じるときに自動的に解放されます。size パラメータはバッファサイズを指定し,0 より大きな値である必要があります。
size パラメータは,limits.h で定義された定数 UINT_MAX によって制限されます。
リダイレクトされない場合,stdin と stdout はバッファリングなしになります。そうでない場合は,フルバッファリングになります。バッファリングなしは,ストリームに書き込まれた文字がただちにファイルまたはデバイスに出力されることを意味します。一方,バッファリングは,文字が蓄積され,ブロック単位で書き込まれることを意味します。
- type パラメータは次のいずれかです。
_IOFBF |
フルバッファリングファイル。バッファが空の場合は,次回の入力処理でバッファ全体にデータを格納しようとします。出力の場合は,バッファ全体にデータを格納してから,データがファイルに書き込まれます。 |
_IOLBF |
行バッファリングファイル。バッファが空の場合は,次回の入力処理でバッファ全体にデータを格納しようとします。ただし,出力の場合は,ファイルに改行文字が書き込まれるたびにバッファがフラッシュされます。 |
_IONBF |
バッファリングなしのファイル。buf パラメータと size パラメータは無視されます。各入力操作はファイルから直接読み取ります。各出力操作はファイルにデータをただちに書き込みます。 |
よくあるエラーの原因として,バッファを自動(ローカル)変数として割り当てた後で,バッファが宣言された関数から戻る前にファイルを閉じ忘れることがあります。
戻り値
成功した場合,setvbuf は 0 を返します。
エラーの場合(type または size に無効な値が指定されている,またはバッファを割り当てる十分な容量がない場合)は,0 以外の値を返します。
例
#include <stdio.h>
int main(void)
{
FILE *input, *output;
char bufr[512];
input = fopen("file.in", "r+b");
output = fopen("file.out", "w");
/* 独自の文字バッファを使って最小限のディスクアクセスを
行う入力ストリームを設定します */
if (setvbuf(input, bufr, _IOFBF, 512) != 0)
printf("failed to set up buffer for input file\n");
else
printf("buffer set up for input file\n");
/* malloc を間接的に呼び出して取得されるスペースを使って
行バッファリングを行う出力ストリームを設定します */
if (setvbuf(output, NULL, _IOLBF, 132) != 0)
printf("failed to set up buffer for output file\n");
else
printf("buffer set up for output file\n");
/* ここで,ファイル I/O を実行します */
/* ファイルを閉じます */
fclose(input);
fclose(output);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |
+ |