当前位置: 首页 > 文档资料 > C 标准库 中文版 >

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

优质
小牛编辑
132浏览
2023-12-01

描述 (Description)

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

声明 (Declaration)

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

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

参数 (Parameters)

  • stream - 这是指向标识开放流的FILE对象的指针。

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

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

Sr.No.模式和说明
1

_IOFBF

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

2

_IOLBF

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

3

_IONBF

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

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

返回值 (Return Value)

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

例子 (Example)

以下示例显示了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 iowiki.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 iowiki.com
This output will go into buff
and this will appear when programm
will come after sleeping 5 seconds