標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#include <stdio.h>
int setvbuf(FILE * __restrict__stream, char * __restrict__buf, int type, size_t size);
指定ストリームのバッファリング戦略およびバッファー・サイズ を制御します。stream ポインターはオープン・ファイルを指す必要があります。また、setvbuf() はファイルに対する最初の操作でなくてはな りません。
この関数を使用しているアプリケーションで ASCII 入出力形式を利用できるようにするには、トピック 2.1 の説明に従って、フィーチャー・テスト・マクロ __LIBASCII を定義してください。
buf が指すロケーションは、z/OS® XL C/C++ ランタイム・ライブラリーがストリーム用のバッファーとして使用するために選択できる、ユーザー提供のエリアを指定します。buf 値が NULL である場合は、そのようなエリアが提供されないこと、および z/OS XL C/C++ ランタイム・ライブラリーがストリーム用のそれ自体のバッファーの管理責任を負うことになっていることを示しています。バッファーを提供した場合には、ストリームがクローズされるまで、存在していることが必要です。
size の値は、0 より大きいことが必要です。
例えば、バッファーが関数ブロックのスコープ内で宣言され る場合には、stream は、関数の終了前にクローズ する必要があります。これによって、バッファーに割り振られるストレージの解放が回避されます。
正常に実行された場合、バッファー不使用を選択した場合でも、setvbuf() は 0 を戻します。
パラメーター・リストで無効値が指定されたか、または要求を実行できない場合には、setvbuf() はゼロ以外を戻します。
/* This example sets up a buffer of buf for stream1 and specifies that
input from stream2 is to be unbuffered.
*/
#include <stdio.h>
#define BUF_SIZE 1024
char buf[BUF_SIZE];
int main(void)
{
FILE *stream1, *stream2;
stream1 = fopen("myfile1.dat", "r");
stream2 = fopen("myfile2.dat", "r");
/* stream1 uses a user-assigned buffer of BUF_SIZE bytes */
if (setvbuf(stream1, buf, _IOFBF, sizeof(buf)) != 0)
printf("Incorrect type or size of buffer 1");
/* stream2 is unbuffered */
if (setvbuf(stream2, NULL, _IONBF, 0) != 0)
printf("Incorrect type or size of buffer 2");
⋮
}