ストリームのバッファリングとバッファー サイズを制御します。Controls stream buffering and buffer size.


int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size


FILE 構造体へのポインター。Pointer to FILE structure.

ユーザー割り当てのバッファー。User-allocated buffer.

バッファリングのモード。Mode of buffering.

バイト単位のバッファー サイズ。Buffer size in bytes. 許容範囲:2 < = size < = INT_MAX (2147483647)。Allowable range: 2 <= size <= INT_MAX (2147483647). 内部的には、 sizeに指定された値は、最も近い2の倍数に丸められます。Internally, the value supplied for size is rounded down to the nearest multiple of 2.

戻り値Return Value

処理が正常に終了した場合は 0 を返します。Returns 0 if successful.

StreamNULLの場合、またはモードまたはサイズが有効な変更の範囲内にない場合は、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーが呼び出されます。If stream is NULL, or if mode or size is not within a valid change, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、この関数は -1 を返し、errnoEINVAL に設定します。If execution is allowed to continue, this function returns -1 and sets errno to EINVAL.

エラー コードの詳細については、「_doserrno、errno、_sys_errlist、_sys_nerr」をご覧ください。For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.


Setvbuf関数を使用すると、プログラムはストリームのバッファリングとバッファーサイズの両方を制御できます。The setvbuf function allows the program to control both buffering and buffer size for stream. ストリームは、開いた後に i/o 操作を実行していない開いているファイルを参照する必要があります。stream must refer to an open file that has not undergone an I/O operation since it was opened. Bufferが指す配列は、 NULLでない限り、バッファーとして使用されます。この場合、 setvbufは、自動的に割り当てられ*た長さサイズ/2 2 バイトのバッファーを使用します。The array pointed to by buffer is used as the buffer, unless it is NULL, in which case setvbuf uses an automatically allocated buffer of length size/2 * 2 bytes.

モードは _IOFBF_IOLBF、または _IONBFである必要があります。The mode must be _IOFBF, _IOLBF, or _IONBF. Mode_IOFBFまたは _IOLBFの場合、サイズはバッファーのサイズとして使用されます。If mode is _IOFBF or _IOLBF, then size is used as the size of the buffer. Mode_IONBFの場合、ストリームはバッファーされません。サイズバッファーは無視されます。If mode is _IONBF, the stream is unbuffered and size and buffer are ignored. モードとその意味の値は次のとおりです。Values for mode and their meanings are:

モードmode value 説明Meaning
_IOFBF_IOFBF フルバッファリングつまり、バッファーがバッファーとして使用され、 サイズがバッファーのサイズとして使用されます。Full buffering; that is, buffer is used as the buffer and size is used as the size of the buffer. BufferNULLの場合、自動的に割り当てられたバッファーサイズのバイト長が使用されます。If buffer is NULL, an automatically allocated buffer size bytes long is used.
_IOLBF_IOLBF 一部のシステムでは、行バッファリングします。For some systems, this provides line buffering. ただし、Win32 の場合、動作は _IOFBFフルバッファリングと同じです。However, for Win32, the behavior is the same as _IOFBF - Full Buffering.
_IONBF_IONBF バッファーまたは サイズに関係なく、バッファーは使用されません。No buffer is used, regardless of buffer or size.


ルーチンによって返される値Routine 必須ヘッダーRequired header
setvbufsetvbuf <stdio.h><stdio.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.


C ランタイム ライブラリのすべてのバージョン。All versions of the C run-time libraries.


// crt_setvbuf.c
// This program opens two streams: stream1
// and stream2. It then uses setvbuf to give stream1 a
// user-defined buffer of 1024 bytes and stream2 no buffer.

#include <stdio.h>

int main( void )
   char buf[1024];
   FILE *stream1, *stream2;

   if( fopen_s( &stream1, "data1", "a" ) == 0 &&
       fopen_s( &stream2, "data2", "w" ) == 0 )
      if( setvbuf( stream1, buf, _IOFBF, sizeof( buf ) ) != 0 )
         printf( "Incorrect type or size of buffer for stream1\n" );
         printf( "'stream1' now has a buffer of 1024 bytes\n" );
      if( setvbuf( stream2, NULL, _IONBF, 0 ) != 0 )
         printf( "Incorrect type or size of buffer for stream2\n" );
         printf( "'stream2' now has no buffer\n" );
'stream1' now has a buffer of 1024 bytes
'stream2' now has no buffer

関連項目See also

ストリーム入出力Stream I/O
fclose、_fcloseallfclose, _fcloseall
fopen、_wfopenfopen, _wfopen