zoukankan      html  css  js  c++  java
  • 标准io(带缓存IO)

    带缓存IO也叫标准IO,符合ANSI C 的标准IO处理,不依赖系统内核,所以移植性强。

    我们使用标准IO操作很多时候是为了减少对read()和write()的系统调用次数,带缓存IO其实就是在用户层再建立一个缓存区,这个缓存区的分配和优化长度等细节都是标准IO库代你处理好了,不用去操心。

     标准IO操作数据流向路径:

                          数据——流缓存区——内核缓存区——磁盘

    非标准IO(不带缓冲)操作数据流向路径:

                          数据——内核缓存区——磁盘

    ————————————————————————————————————

    标准的 C 库函数建立在底层系统调用之上,即 C 函数库文件访问函数的实现中使用了文件 I/O 系统调用。 标准的 C 库中的文件处理函数为了减少使用系统调用的次数,提高效率,根据应用的不同,如图所示采用缓冲区机制,这样,在对磁盘文件进行读操作时,可以一次性地从文件中读出大量数据到缓冲区中,以后对这部分数据的访问就不需要再使用系统调用了。在对磁盘文件进行操作时,可以先将内容存储在文件缓冲区中,待文件缓冲区满后再用系统调用将该文件一次写入到磁盘。
    根据使用领域的不同需求,标准 C 函数使用了全缓冲、行缓冲和无缓冲 3 种缓冲区处理方式。
    全缓冲:这种情况下,在填满标准I/O缓冲区后才进行实行I/O操作。
    行缓冲:在这种情况下,当在输入和输出中遇到换行符时,标准I/O库执行I/O操作。当流涉及一个终端时,通常使用行缓冲。
    不带缓冲:标准I/O库不对字符进行缓冲存储。
    更改缓冲类型Void setbuf(FILE *fp, char * buf)
      Int setvbuf(FILE *fp, char *buf, int mode, size_t size)
      返回值:成功返回0,出错返回非0值
    这些函数一定要在流已被打开后调用,而且也应该在对流执行任何其他操作之前调用。
     
    标准I/O流都有一个与其相关联的文件描述符,可以对一个流调用fileno函数以获得其描述符
       int fileno(FILE *fp)
       注意:fileno不是ISO C标准部分,而是POSIX支持的扩展。
  • 相关阅读:
    Start Python 学习笔记(琐碎知识,持续更新。。。)
    电子商务网站数据分析常用指标(转)
    设计模式学习笔记——适配器(Adapter)模式
    Json概述以及python对json的相关操作
    数据层参考资料
    Oracle内存组件与进程的相关知识总结
    面试题_二分查找及其变形
    两路归并的数组和链表实现
    Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)
    设计模式学习笔记——工厂方法模式
  • 原文地址:https://www.cnblogs.com/mylinux/p/3017967.html
Copyright © 2011-2022 走看看