Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71350
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 189
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-24 20:56
文章分类

全部博文(21)

文章存档

2016年(1)

2015年(20)

我的朋友

分类: 服务器与存储

2015-09-21 14:52:34

函数名: setvbuf
用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size);
type : 期望缓冲区的类型:
_IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。
_IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。
_IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。
size : 缓冲区内字节的数量。
这段代码:
if (setvbuf(output, NULL, _IOLBF, 132) != 0)
是设置output文件的buffer,这个buffer会由系统自行调用malloc来申请,buffer是按行模式工作的,每行最大132个字节,也就是当你写output的时候,每写完一行(遇见\n),就会把整行真正的写到磁盘文件上,在遇到换行符前,都暂存在系统自动申请的buffer中,而不会写到真正的磁盘文件上。

【为什么要使用setvbuf函数?】

如果你的内存足够大,可以把文件IO的BUF设置大一些,这样每次你用fopen/fread/fwrite/fscanf/fprintf语句的时候,都会在内存里操作,减少内存到磁盘IO读写的操作次数,提高系统效率。

如果你的程序的功能涉及到类似数据库、视频、音频、图像处理等大量需要爆发式磁盘到内存的IO情况下,可以考虑用setvbuf进行优化内存IO,其他情况下可以不考虑,LINUX/WINDOWS会自动处理这些问题。

阅读(977) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~