setbuf

ストリーム バッファリングを制御します。 この関数は非推奨とされます。代わりに setvbuf をご使用ください。

構文

void setbuf(
   FILE *stream,
   char *buffer
);

パラメーター

stream
FILE 構造体へのポインター。

buffer
ユーザー割り当てのバッファー。

解説

setbuf 関数は stream のバッファリングを制御します。 引数は stream 、読み取りまたは書き込みされていない開いているファイルを参照する必要があります。 引数が buffer 指定されている NULL場合、ストリームはバッファーに格納されません。 そうでない場合には、バッファーは長さ BUFSIZ の文字配列を指す必要があります。ここで、BUFSIZ は STDIO.H で定義されているバッファー サイズです。 所定のストリームに対してシステムによって割り当てられた既定のバッファーではなく、ユーザーが指定したバッファーが I/O バッファー処理に使用されます。 ストリームはstderr既定ではバッファーされませんが、バッファーstderrの割り当てに使用setbufできます。

setbuf が置き換 setvbufえられました。これは、新しいコードに推奨されるルーチンです。 とは異なり setvbufsetbuf エラーを報告する方法はありません。 setvbuf では、バッファリング モードとバッファー サイズの両方を制御することもできます。 setbuf は、既存のコードとの互換性のために存在します。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

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

互換性の詳細については、「 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" );
      _fcloseall();
   }
}
stream1 set to user-defined buffer at: 0012FCDC
stream2 buffering disabled

関連項目

ストリーム入出力
fclose, _fcloseall
fflush
fopen, _wfopen
setvbuf