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取代,是新代码的首选实例。 setbuf 用于现有代码的兼容性。

要求

实例

必需的头

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

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

请参见

参考

流I/O

fclose, _fcloseall

fflush

fopen, _wfopen

setvbuf