共用方式為


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。

如果 stream 是 NULL,或者如果 mode 或 size 不是有效的變更,則無效的參數處理會被叫用處理,如 參數驗證中所述。 如果允許繼續執行,這個函式會傳回 errno,並將 EINVAL 設為 -1。

如需有關這些錯誤碼和其他錯誤碼的詳細資訊,請參閱 _doserrno、errno、_sys_errlist 和 _sys_nerr

備註

setvbuf 函式可讓程式控制緩衝區、緩衝區大小的 stream。 當他開啟時,stream 必須參考未執行 I/O 作業的開啟檔案。 buffer所指向的陣列當做緩衝區,除非它是NULL,在 setvbuf 中使用自動配置的長度 size/2 * 2 位元組的緩衝區。

模式必須是_IOFBF, _IOLBF, or _IONBF。 如果 mode 是 _IOFBF 或 _IOLBF,則 size 當做緩衝區的大小。 如果 mode 是 _IONBF,則資料流是無緩衝區的,且 size 和 buffer 會被忽略。 mode 的值及其意義如下:

  • _IOFBF
    完整的緩衝區;換句話說,當 buffer 被當作緩衝區和 size 當做緩衝區的大小。 如果 buffer 是 NULL,則使用自動配置的緩衝區 size 位元組長。

  • _IOLBF
    對於某些系統,這提供行的緩衝區。 不過,對於 Win32,行為與 _IOFBF 相同-充分的緩衝區。

  • _IONBF
    不論 buffer 或 size,都沒有使用緩衝區。

需求

常式

必要的標頭

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();
   }
}
  

.NET Framework 對等用法

不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例

請參閱

參考

資料流 I/O

fclose、_fcloseall

fflush

fopen、_wfopen

setbuf