当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 setvbuf()用法及代码示例



描述

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- 这是指向标识打开流的 FILE 对象的指针。

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

  • mode- 这指定了文件缓冲的模式 -

不。 模式和描述
1

_IOFBF

Full buffering− 在输出时,一旦缓冲区已满就写入数据。在输入时,当请求输入操作并且缓冲区为空时填充缓冲区。

2

_IOLBF

Line buffering- 在输出时,当一个换行符插入到流中或缓冲区已满时写入数据,先发生什么。在输入时,当请求输入操作并且缓冲区为空时,缓冲区被填充直到下一个换行符。

3

_IONBF

No buffering− 不使用缓冲区。每个 I/O 操作都会尽快写入。缓冲区和大小参数被忽略。

  • size- 这是缓冲区大小(以字节为单位)

返回值

此函数在成功时返回零,否则返回非零值。

示例

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

#include <stdio.h>

int main () {
   char buff[1024];

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

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

   fprintf(stdout, "This is tutorialspoint.com\n");
   fprintf(stdout, "This output will go into buff\n");
   fflush( stdout );

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

   sleep(5);

   return(0);
}

让我们编译并运行上面的程序以产生以下结果。这里程序不断将输出缓冲到buff直到它第一次调用 fflush(),之后它再次开始缓冲输出并最终休眠 5 秒。它在程序出来之前将剩余的输出发送到 STDOUT。

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

相关用法


注:本文由纯净天空筛选整理自 C library function - setvbuf()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。