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 个字节的缓冲区的情况下。

该模式必须为 _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