setbuf

控制流缓冲。 此函数已弃用;请改用 setvbuf

语法

void setbuf(
   FILE *stream,
   char *buffer
);

参数

stream
指向 FILE 结构的指针。

buffer
用户分配的缓冲区。

备注

setbuf 函数控制 stream 的缓冲。 stream 参数必须引用尚未读取或编写的打开的文件。 如果 buffer 参数为 NULL,则流是无缓冲的。 如果不是这样,则缓冲区必须指向长度为 BUFSIZ 的字符数组,其中 BUFSIZ 是 STDIO.H 中定义的缓冲区大小。 用户指定的缓冲区(而不是给定流的默认系统分配的缓冲区)用于 I/O 缓存。 默认情况下,stderr 流是无缓冲的,但您可以使用 setbuf 将缓存区分配给 stderr

setbuf 已由新代码的首选例程 setvbuf 替换。 与 setvbuf 不同,setbuf 无法报告错误。 setvbuf 还允许控制缓冲模式和缓冲区大小。 提供 setbuf 以便与现有代码兼容。

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头
setbuf <stdio.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// crt_setbuf.c
// compile with: /W3
// This program first opens files named DATA1 and
// DATA2. Then it uses setbuf to give DATA1 a user-assigned
// buffer and to change DATA2 so that it has no buffer.

#include <stdio.h>

int main( void )
{
   char buf[BUFSIZ];
   FILE *stream1, *stream2;

   fopen_s( &stream1, "data1", "a" );
   fopen_s( &stream2, "data2", "w" );

   if( (stream1 != NULL) && (stream2 != NULL) )
   {
      // "stream1" uses user-assigned buffer:
      setbuf( stream1, buf ); // C4996
      // Note: setbuf is deprecated; consider using setvbuf instead
      printf( "stream1 set to user-defined buffer at: %Fp\n", buf );

      // "stream2" is unbuffered
      setbuf( stream2, NULL ); // C4996
      printf( "stream2 buffering disabled\n" );
      _fcloseall();
   }
}
stream1 set to user-defined buffer at: 0012FCDC
stream2 buffering disabled

另请参阅

流 I/O
fclose_fcloseall
fflush
fopen_wfopen
setvbuf