位置:首页 > 高级语言 > C语言标准库 > setvbuf() - C语言库函数

setvbuf() - C语言库函数

C库函数 int setvbuf(FILE *stream, char *buffer, int mode, size_t size) 定义了如何流应该被缓冲。

声明

下面是函数setvbuf()函数的声明。

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

参数

  • stream -- 这是一个文件对象标识一个开放的流指针。

  • buffer -- 这是用户分配的缓冲区。如果设置为NULL,该函数会自动分配一个指定大小的缓冲区。

  • mode -- 此指定文件缓冲模式:

mode 描述
_IOFBF Full buffering: 在输出时,数据被写入一旦缓冲区已满。在输入缓冲区填满时,输入操作要求和缓冲区是空的。
_IOLBF Line buffering: 在输出时,数据被写入到流或缓冲区满时,无论发生什么事时,当插入一个换行符。在输入缓冲区充满时要求输入操作,直到下一个换行符,缓冲区为空。
_IONBF No buffering: 不使用缓冲区。每个I/O操作,尽快写入。缓冲区和大小的参数将被忽略。
  • size -- 这是一个缓冲区的大小(以字节为单位)

返回值

这个函数返回其他成功返回0,则返回非零值。

例子

下面的例子显示了函数setvbuf()函数的用法。

#include <stdio.h>

int main()
{

   char buff[1024];

   memset( buff, '\0', sizeof( buff ));

   fprintf(stdout, "Going to set full buffering on
");
   setvbuf(stdout, buff, _IOFBF, 1024);

   fprintf(stdout, "This is gitbook.net
");
   fprintf(stdout, "This output will go into buff
");
   fflush( stdout );

   fprintf(stdout, "and this will appear when programm
");
   fprintf(stdout, "will come after sleeping 5 seconds
");

   sleep(5);

   return(0);
}

让我们编译和运行上面的程序,这将产生以下结果。在这里,程序保持缓冲到输出的buff,直到它面临的第一次调用到fflush() 后,再次开始缓冲输出,,终于睡5秒钟。发送剩余的输出到标准输出程序出来之前。

Going to set full buffering on
This is gitbook.net
This output will go into buff
and this will appear when programm
will come after sleeping 5 seconds