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支持的扩展。
  • 相关阅读:
    [Database] Oracle 中的where 可以后接group by
    [Hibernate] inner Join和 left Join
    [Hibernate] 分页查询
    [Hibernate] 通过 properties 类和 hql 语句进行动态查询
    [Oracle11g] 通过伪列查询
    [Hibernate] hibernate.cfg.xml 配置文件的一些设置
    [Hibernate] One-To-Many 配置文件和注解的方式以及HQL语句
    Kayleigh O'Connor
    java 对象拷贝工具
    clone的深拷贝 or 浅拷贝
  • 原文地址:https://www.cnblogs.com/mylinux/p/3017967.html
Copyright © 2011-2022 走看看