• 关于setvbuf()函数的详解


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

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

    功 能: 把缓冲区与流相关
      用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size);
      参数:stream :指向流的指针 ;
      buf : 期望缓冲区的地址;
      type : 期望缓冲区的类型:
      _IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。
      _IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。
      _IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。
      size : 缓冲区内字节的数量。
    http://baike.baidu.com/view/1983906.htm
    if (setvbuf(input, bufr, _IOFBF, 512) != 0)
    是设置 input这个文件流使用 bufr 所指的512个字节作为 input文件的buffer, 当你操作input文件时,数据都会暂存在 bufr 里面,每次读input时,系统会一次性读512字节到bufr里暂存。
    if (setvbuf(output, NULL, _IOLBF, 132) != 0)
    是设置output文件的buffer,这个buffer会由系统自行调用malloc来申请,buffer是按行模式工作的,每行最大132个字节,也就是当你写output的时候,每写完一行(遇见 ),就会把整行真正的写到磁盘文件上,在遇到换行符前,都咱存在系统自动申请的buffer中,而不会写到真正的磁盘文件上。
  • 相关阅读:
    UniEAP V4 开发实践说明文档
    SI_WorkShop_V4安装手册
    unieap platform eclipse.ini vm设置
    asp.net 配置 web.config 禁用VS2013自带的Browser Link功能
    unieap 建库
    onserverclick
    工作中记录的命令和知识点(不断更新)
    CentOS 下做端口映射/端口转发
    DELL服务器硬件信息采集SHELL脚本
    Linux中变量#,@,0,1,2,*,$$,$?的意思
  • 原文地址:https://www.cnblogs.com/-colin/p/8520612.html
Copyright © 2020-2023  润新知