setvbuf
ストリームのバッファリングとバッファー サイズを制御します。
構文
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
パラメーター
stream
FILE
構造体へのポインター。
buffer
ユーザー割り当てのバッファー。
mode
バッファリングのモード。
size
バイト単位のバッファー サイズ。 許容範囲: 2 <= size
<INT_MAX (2147483647)。 内部的に、size
に指定された値は 2 の倍数に最も近い値に切り捨てられます。
戻り値
処理が正常に終了した場合は 0 を返します。
有効な変更があるNULL
場合stream
、またはsize
有効な変更内にない場合mode
は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、この関数は -1 を返し、errno
を EINVAL
に設定します。
これらのエラー コードおよびその他のエラー コードの詳細については、「errno
、_doserrno
、_sys_errlist
、_sys_nerr
」を参照してください。
解説
setvbuf
関数により、プログラムはバッファー処理と stream
のバッファー サイズの両方を制御することができます。 stream
は、開かれた後に I/O 操作を行っていない開いているファイルを参照する必要があります。 参照先buffer
の配列はバッファーとして使用されます。そうでない場合buffer
setvbuf
はNULL
、自動的に割り当てられた長さ size
/2 * 2 バイトのバッファーが使用されます。
モードは _IOFBF
、_IOLBF
、または _IONBF
である必要があります。 mode
が _IOFBF
または _IOLBF
である場合には、size
がバッファーのサイズとして使用されます。 ある_IONBF
場合mode
、ストリームはバッファーに格納されておらず、両方size
ともbuffer
無視されます。 mode
の値とその意味は次のとおりです。
mode 値 |
意味 |
---|---|
_IOFBF |
フル バッファリングします。つまり、buffer はバッファーとして使用され、size はバッファーのサイズとして使用されます。 あるNULL 場合buffer 、このモードでは、バイト長の自動的に割り当てられたバッファーがsize 使用されます。 |
_IOLBF |
一部のシステムでは、このモードではライン バッファリングが提供されます。 ただし、Win32 の動作は _IOFBF と同じで、フル バッファリングします。 |
_IONBF |
buffer または size に関係なく、バッファーは使用されません。 |
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください。
必要条件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
setvbuf |
<stdio.h> |
互換性の詳細については、「 Compatibility」を参照してください。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
例
// 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" );
else
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" );
else
printf( "'stream2' now has no buffer\n" );
_fcloseall();
}
}
'stream1' now has a buffer of 1024 bytes
'stream2' now has no buffer
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示