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。

如果 streamNULL ,或 如果 modesize 不在有效的變更內,則會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,此函式會傳回 -1,並將 errno 設為 EINVAL

如需這些錯誤碼和其他錯誤碼的相關資訊,請參閱 errno_doserrno_sys_errlist_sys_nerr

備註

setvbuf 函式可讓程式控制 stream 的緩衝處理和緩衝區大小。 stream 必須參考自開啟後尚未進行 I/O 作業的開啟檔案。 所 buffer 指向的陣列會當做緩衝區使用,除非 bufferNULL ,在此情況下 setvbuf 會使用長度 size 為 /2 * 2 位元組的自動設定緩衝區。

模式必須是 _IOFBF_IOLBF_IONBF。 如果 mode_IOFBF_IOLBF,則會將 size 用作緩衝區的大小。 如果 mode_IONBF ,則資料流程會取消緩衝區處理,並忽略 和 sizebuffermode 的值和其意義如下:

mode 意義
_IOFBF 完整緩衝處理;亦即,將 buffer 用作緩衝區,並將 size 用作緩衝區的大小。 如果 bufferNULL ,則此模式會使用長度為位元組的自動設定緩衝區 size
_IOLBF 對於某些系統,此模式會提供行緩衝處理。 不過,對於 Win32,行為與 _IOFBF 相同 - 完整緩衝處理。
_IONBF 不論 buffersize,都不會使用緩衝區。

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

需求

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

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

程式庫

所有版本的 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

另請參閱

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