setvbuf

控制流缓冲区和缓冲区大小。

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size 
);

参数

  • stream
    为 FILE 结构的指针。

  • buffer
    用户分配的缓冲区。

  • mode
    缓冲模式。

  • size
    缓冲区大小 (以字节为单位)。 允许的范围:2 个 AMP_LT= size AMP_LT= 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 个字节情况下自动分配的缓冲区。

该模式必须是 _IOFBF、 _IOLBF或 _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