setbuf

控制資料流緩衝處理。 此函數已被取代。請改用 setvbuf

語法

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

參數

stream
FILE 結構的指標。

buffer
使用者配置的緩衝區。

備註

setbuf 函式會控制 stream 的緩衝處理。 自 stream 變數必須參考尚未讀取或寫入的開啟檔案。 如果自 buffer 變數為 NULL ,則資料流程會取消緩衝區。 否則,緩衝區必須指向長度為 BUFSIZ 的字元陣列,其中 BUFSIZ 是 STDIO.H 中所定義的緩衝區大小。 使用者指定的緩衝區 (而非指定資料流的預設系統配置緩衝區) 用於 I/O 緩衝處理。 資料流程 stderr 預設為未緩衝處理,但您可以使用 setbuf 將緩衝區指派給 stderr

setbuf 已取代為 setvbuf ,這是新程式碼慣用的常式。 不同于 setvbufsetbuf 無法報告錯誤。 setvbuf 也可讓您控制緩衝模式和緩衝區大小。 setbuf 存在以與現有程式碼相容。

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

需求

常式 必要的標頭
setbuf <stdio.h>

如需相容性詳細資訊,請參閱相容性

範例

// 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

另請參閱

資料流 I/O
fclose, _fcloseall
fflush
fopen, _wfopen
setvbuf