zoukankan      html  css  js  c++  java
  • 文件I/0缓冲

    设置stdio流缓冲模式

    #include<stdio.h>
    int setvbuf(FILE *stream,char *buf,int mode,size_t size)    
    int setbuf(FILE *stream,char *buf)//该函数不返回函数结果
    int setbuffer(FILE *stream,char *buf,size_t size)//类似setbuf函数只是允许指定缓冲区大小

    其中mode的值可为
    _IONBF不进行缓冲直接读写
    _IOLBF进行行缓冲
    _IOFBF进行全缓冲
    调用函数出错返回非零值

    刷新stdio缓冲区

    int fflush(FILE *stream)    //刷新到内核缓冲区,若参数为NULL,刷新全部缓冲区

    用于控制文件I/O内核缓冲的系统调用

    #include<stdio.h>
    int fsync(int fd)//所有元数据刷新到磁盘
    int fdatasync(int fd)//只刷新数据到磁盘,元数据不刷新(例如最近更改时间等等属性)
    void sync(void) //刷新所有数据(包括数据块,元数据等)

    混合使用库函数和系统调用进行文件I/O

    int fileno(FILE *stream)//该函数用于获取文件流相对应的文件描述符,成功返回文件描述符失败返回-1
    FILE *fdopen(int fd,const char *mode)//该函数功能是根据文件描述符返回文件流,成功返回文件指针,失败返回NULL,mode可以为r,w,a等

    就I/O模式相内核提出建议

    #include<fcntl.h>
    int posix_fadvise(int fd,off_t offset,off_t len,int advice)

    fd文件描述符,offset起始位置,len长度
    成功返回0,失败返回一个负数
    其中advice参数可以是:
    POSIX_FADV_NORMA 无特别建议,文件预读窗口大小为默认值128kb
    POSIX_FADV_SEQUENTIAL 进程估计会从低偏移量到高偏移量顺序读取数据,文件预读窗口大大小为默认值两倍
    POSIX_FADV_RANDOM 随机顺序访问数据,在linux中该选项会禁用文件预读
    POSIX_FADV_WILLNEED 预计不久就会用到,将数据填充到缓冲区高速缓存中,后续对该文件的读取就会直接从高速缓存中读取数据即可
    POSIX_FADV_DONTNEED 在不久的将来不会访问指定的文件区域,释放相关的高速缓存页面(如果存在的话)
    POSIX_FADV_NOREUSE 一次性访问指定文件区域,不再复用,访问一次后即可释放页面

  • 相关阅读:
    mysql应用技巧
    Python httplib学习
    桌标相关知识
    行业百科知识--Github
    Ghost win7 系统安装(虚拟机)
    记一次pycharm和vscode因网络问题插件下载失败的问题
    Pydiction补全插件
    MS17-010远程溢出漏洞(CVE-2017-0143)
    shell快速入门
    Yarn架构
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730620.html
Copyright © 2011-2022 走看看