ストリーム バッファリングを制御します。Controls stream buffering. この関数は非推奨とされました。代わりに setvbuf をご使用ください。This function is deprecated; use setvbuf instead.


void setbuf(
   FILE *stream,
   char *buffer


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

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


Setbuf関数は、ストリームのバッファリングを制御します。The setbuf function controls buffering for stream. ストリーム引数は、読み取りまたは書き込みが行われていない開いているファイルを参照する必要があります。The stream argument must refer to an open file that hasn't been read or written. バッファー引数がNULLの場合、ストリームはバッファーされません。If the buffer argument is NULL, the stream is unbuffered. それ以外の場合、バッファーは長さBUFSIZの文字配列を指す必要があります。 BUFSIZは、STDIO で定義されているバッファーサイズです。始め.If not, the buffer must point to a character array of length BUFSIZ, where BUFSIZ is the buffer size as defined in STDIO.H. 所定のストリームに対してシステムによって割り当てられた既定のバッファーではなく、ユーザーが指定したバッファーが I/O バッファー処理に使用されます。The user-specified buffer, instead of the default system-allocated buffer for the given stream, is used for I/O buffering. Stderrストリームは既定ではバッファリングされませんが、 setbufを使用して、 stderrにバッファーを割り当てることができます。The stderr stream is unbuffered by default, but you can use setbuf to assign buffers to stderr.

setbufsetvbufに置き換えられました。これは、新しいコードの推奨されるルーチンです。setbuf has been replaced by setvbuf, which is the preferred routine for new code. Setvbufとは異なり、 setbufにはエラーを報告する方法がありません。Unlike setvbuf, setbuf has no way of reporting errors. また、 setvbufでは、バッファリングモードとバッファーサイズの両方を制御できます。setvbuf also lets you control both the buffering mode and the buffer size. setbufは、既存のコードとの互換性を維持するために存在します。setbuf exists for compatibility with existing code.


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

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


// crt_setbuf.c
// compile with: /W3
// This program first opens files named DATA1 and
// DATA2. Then it uses setbuf to give DATA1 a user-assigned
// buffer and to change DATA2 so that it has no buffer.

#include <stdio.h>

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

   fopen_s( &stream1, "data1", "a" );
   fopen_s( &stream2, "data2", "w" );

   if( (stream1 != NULL) && (stream2 != NULL) )
      // "stream1" uses user-assigned buffer:
      setbuf( stream1, buf ); // C4996
      // Note: setbuf is deprecated; consider using setvbuf instead
      printf( "stream1 set to user-defined buffer at: %Fp\n", buf );

      // "stream2" is unbuffered
      setbuf( stream2, NULL ); // C4996
      printf( "stream2 buffering disabled\n" );
stream1 set to user-defined buffer at: 0012FCDC
stream2 buffering disabled

関連項目See also

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