• setbuf和freopen


          看memcached代码的时候学习了一个api,setbuf,可以设置文件流的缓冲区。

           #include <stdio.h>

           void setbuf(FILE *stream, char *buf);
           void setbuffer(FILE *stream, char *buf, size_t size);
           void setlinebuf(FILE *stream);
           int setvbuf(FILE *stream, char *buf, int mode , size_t size);

           使用技巧:

            setbuf(stdout, NULL);

            指定buf参数为NULL可以将文件指针设置为无缓冲的文件指针,和linux的open打开的文件描述符一样,写入data会立即刷新到文件。ps:linux下的stdout和stderr默认是没有缓冲区的,fprintf会直接输出到屏幕,这里的stdout泛指文件指针。

            char buff[2048] = {0};

            setbuffer(stdout, buff, sizeof(buff));

            可以给指定的文件指针设置指定大小的缓冲区,以后向该文件写入的data会先缓存起来,缓冲区溢出才会写入文件,这里的例子就给stdout设置了2048的缓冲区。

           

            freopen用来重定向文件流,经常重定向stdin、stdout、stderr。

           FILE *freopen(const char *path, const char *mode, FILE *stream);
           freopen("./0707.txt", "w", stdout);

           linux下的freopen和fopen一样,打开的文件默认有4096的缓冲区,写入data不会立即刷新到文件,不方便作为调试信息,可以在freopen后设置文件缓冲区为NULL。

           setbuff(stdout, NULL);

           

           经常用freopen+setbuf将程序运行结果输出到文件来调试。

           setbuffer是setbuff一族的另外一个重要api,频繁磁盘io是非常耗性能的,而setbuffer可以将频繁的小data io缓冲起来,减少访问磁盘的次数。可以极大的提升阻塞io的效率。

  • 相关阅读:
    cocos2dx for xna 基于地图的碰撞检测和信息提示
    cocos2dx for xna实现人物不同方向行走
    coco2dx for wp7之页面跳转特效
    cocos2dx for wp之精灵动作——Actions
    利用webxml来构建wp的天气预报
    cocos2dx for wp 之Box2D游戏是男人就坚持60M(一)
    cocos2dx for wp之TexturePackerGUI工具使用
    cocos2dx for wp 之Box2D的应用
    cocos2dx for xna 地图编辑
    WPF触发器(Trigger、DataTrigger、EventTrigger)
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/4626374.html
Copyright © 2020-2023  润新知