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支持的扩展。
  • 相关阅读:
    TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点
    Android App的签名打包(晋级篇)
    Android ProgressBar 进度条荧光效果
    Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】
    Android UI--自定义ListView(实现下拉刷新+加载更多)
    Android平台下利用zxing实现二维码开发
    自定义组件---图片和文字实现ImageButton效果
    JNI由浅入深_10_JNI 综合开发
    开关按钮实现
    Android Asynctask与Handler的比较,优缺点区别,Asynctask源码
  • 原文地址:https://www.cnblogs.com/mylinux/p/3017967.html
Copyright © 2011-2022 走看看