C 语言标准库函数 - setvbuf()

返回上一级

C 语言标准库 <stdio.h> 函数 int setvbuf(FILE stream, char buffer, int mode, size_t size) 定义流 stream 应如何缓冲

头文件

#include <stdio.h>

函数原型

下面是 setvbuf() 函数的声明

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

参数

  • stream : 这是指向 FILE 对象的指针,该 FILE 对象标识了一个打开的流。

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

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

模式 描述
_IOFBF 全缓冲:对于输出,数据在缓冲填满时被一次性写入。对于输入,缓冲会在请求输入且缓冲为空时被填充。
_IOLBF 行缓冲:对于输出,数据在遇到换行符或者在缓冲填满时被写入,具体视情况而定。对于输入,缓冲会在请求输入且缓冲为空时被填充,直到遇到下一个换行符。
_IONBF 无缓冲:不使用缓冲。每个 I/O 操作都被即时写入。buffer 和 size 参数被忽略。
  • size : 这是缓冲的大小,以字节为单位

返回值

  • 如果成功,则该函数返回 0
  • 否则返回非零值

范例

下面的范例演示了 setvbuf() 函数的用法

/**
 * file: main.c
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{

   char buff[1024];

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

   fprintf(stdout, "启用全缓冲\n");
   setvbuf(stdout, buff, _IOFBF, 1024);

   fprintf(stdout, "这里是 www.twle.cn\n");
   fprintf(stdout, "该输出将保存到 buff\n");
   fflush( stdout );

   fprintf(stdout, "这将在编程时出现\n");
   fprintf(stdout, "最后休眠五秒钟\n");

   sleep(5);

   return(0);
}

编译运行以上范例,输出结果如下。

在这里,程序把缓冲输出保存到 buff ,直到首次调用 fflush() 为止,然后开始缓冲输出,最后休眠 5 秒钟。它会在程序结束之前,发送剩余的输出到 STDOUT

$ gcc main.c && ./a.out
启用全缓冲
这里是 www.twle.cn
该输出将保存到 buff
这将在编程时出现
最后休眠五秒钟

返回上一级

C 语言标准库

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.