共用方式為


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是不是有效的變更,在不正確的參數處理常式會叫用,如所述參數驗證。 如果要繼續,這個函式傳回-1 和集合允許執行errno到EINVAL。

有關這些及其他錯誤碼資訊,請參閱 _doserrno、 errno、 _sys_errlist,以及 _sys_nerr

備註

setvbuf函式可讓程式控制兩個緩衝處理,而且緩衝大小的stream。 stream必須參照到已開啟的檔案,因為它開啟尚未經歷的 I/O 操作。 陣列所指buffer做為緩衝區,除非它是NULL,在此情況下setvbuf會使用自動配置的緩衝區長度的size/2 * 2 個位元組。

The mode must be _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