手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

UNIX环境高级编程笔记之标准I/O库

[日期:2016-07-22] 来源:Linux社区  作者:bakari [字体: ]

一、总结

  文件I/O一章讲了不带缓冲的I/O,本章讲的是带缓冲的I/O。不带缓冲针对的是内核的系统调用,而带缓冲针对的是用户空间的标准库函数,是基于带缓冲的I/O实现的。不带缓冲的I/O通过文件描述符的方式来引用一个文件,而带缓冲的I/O则通过文件流(stream)的方式来引用文件。至于为什么要用流的方式,原因就是带缓冲区,这样文件的读写就要经过缓冲区做缓冲,就像水流一样。

  引入标准IO库的目的是为了提高IO的效率,避免频繁的进行read/write系统调用,而系统调用会消耗较多的资源。因此标准IO库引入了IO缓存,通过累积一定量的IO数据后,然后集中写入到实际的文件中来减少系统调用,从而提高IO效率。标准IO库会自动管理内部的缓存,不需要程序员介入。然而,也正是因为我们看不到标准IO库的缓存,有时候会给我们带来一定的迷惑性。

  缓冲区的类型分为三种:

1)全缓冲:在填满标准I/O缓冲区后才进行实际I/O操作,对于磁盘上的文件通常是由标准I/O库实施全缓冲的,在一个流上执行第一次I/O操作时,相关标准I/O函数通常调用malloc等函数来获得所需的缓冲区。

2)行缓冲:这种情况下,当在输入输出中遇到换行符时,标准I/O库执行I/O操作,因此,当涉及终端设备交互时,才使用行缓冲。

3)不带缓冲:即标准I/O库不对字符进行缓冲存储,那么这种情况就直接调用的是read、write等系统调用函数。这种情况一般用在需要对输入输出及时响应的情况下,如标准出错流stderr通常是不带缓冲的。

二、看图说话

UNIX环境高级编程中文第二版PDF高清版 下载地址  http://www.linuxidc.net/thread-2063-1-1.html

Unix环境高级编程 源代码地址 http://www.linuxidc.com/Linux/2011-04/34826.htm

Unix环境高级编程源码编译 http://www.linuxidc.com/Linux/2011-09/42503.htm

apue.h头文件(Unix环境高级编程) http://www.linuxidc.com/Linux/2012-01/51729.htm

《Unix环境高级编程》(第二版)apue.h的错误 http://www.linuxidc.com/Linux/2011-04/34662.htm

Unix环境高级编程第二版读书笔记 http://www.linuxidc.com/Linux/2011-04/34235.htm

《Unix环境高级编程》中apue.h的问题 http://www.linuxidc.com/Linux/2013-01/77686.htm

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-07/133433.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款