摘自 http://blog.chinaunix.net/uid-26565142-id-3051729.html

1,文件IO函数,在Unix中,有如下5个:open,read,write,lseek,close。称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。

2,标准IO库,由ANSI C标准说明。标准IO库处理很多细节。例如缓存分配,以优化长度执行IO等。标准的IO提供了三种类型的缓存。

(1)全缓存:当填满标准IO缓存后才进行实际的IO操作。

(2)行缓存:当输入或输出中遇到新行符时,标准IO库执行IO操作。

(3)不带缓存:stderr就是了。

3,缓存有什么好处呢?

可以把程序向输出流写数据比做从北京运送烤鸭到上海。如果没有缓冲区,那么每执行一次write(int b)方法,仅仅把一只烤鸭从北京运到上海,如果由一万只烤鸭,就要运送一万次,这样的运送效率显然很低。为了减少运送次数,可以先把一批烤鸭装到一个集装箱中,这样就能成批的运送烤鸭,这个集装箱就是缓冲区。

在默认的情况下,只有当这个集装箱装满后,才会把这箱烤鸭运到上海(全缓存),而flush方法表示不管集装箱是否装满,都执行一次运货操作。

为了保证输入流和输出流被及时关闭,最好把关闭流的操作放到finally代码块中。

文件IO函数和标准IO库的区别的更多相关文章

  1. 文件的概念、标准IO其一

    1.文件的概念 文件是一种存储在磁盘(掉电不丢失存储设备)上,掉电不丢失的一种存储数据的方式,文件在系统中有以下层次的结构来实现. 系统调用.文件IO.标准IO的关系如下: 2.linux系统的文件分 ...

  2. 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口

    最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...

  3. 标准C IO函数和 内核IO函数 效率(时间)比较

    前言 标准C提供的文件相关的IO函数,除标准错误输出是不带缓冲的(可以尽快的将错误消息显示出来)之外,所有与终端相关的都是行缓冲,其余都是全缓冲的. 我们可以使用setbuf,setvbuf改变指定流 ...

  4. [Java IO]04_系统标准IO

    System表示系统类,它有3个与 Java IO 有关的常量. System.out——系统标准输出 System.in——系统标准输入 System.err——错误信息输出 System.out ...

  5. 动态库dll使用module.def文件导出函数(像静态库一样使用)

    1.新建文件module.def. 2.动态库工程上右键->属性->链接器->输入->模块定义文件编辑它写入module.def 3.下面为module.def实例(smart ...

  6. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  7. 18、标准IO库详解及实例

    标准IO库是由Dennis Ritchie于1975年左右编写的,它是Mike Lestbain写的可移植IO库的主要修改版本,2010年以后, 标准IO库几乎没有进行什么修改.标准IO库处理了很多细 ...

  8. 文件IO和标准IO的区别【转】

    一.先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O).不带缓存指的是每个read,write都调用内核中的一个系统调用.也就是一般所 ...

  9. C5 标准IO库:APUE 笔记

    C5 :标准IO库 在第三章中,所有IO函数都是围绕文件描述符展开,文件描述符用于后续IO操作.由于文件描述符相关的操作是不带缓冲的IO,需要操作者本人指定缓冲区分配.IO长度等,对设备环境要求一定的 ...

随机推荐

  1. FeWeb基础之HTML

    FeWeb基础之HTML 1.HTML简介 HTML是一种超文本标记语言,它的文件扩展名为.html,它的所有部分都是由标记<...>和标记</...>包括起来. 在一个HTM ...

  2. [WPF系列]-高级部分 Shadowed TextBox

    Download Solution ShadowedTextBoxExample.zip (70.3 KB) Usage <local:ShadowedTextBox Label="F ...

  3. Windows Live Writer测试

    第一次使用Windows Live Writer,一堆问题,不知道是中国强大的局域网防火墙问题还是咋的,弄了半天. 1.C++的测试代码: int _tmain(int argc, _TCHAR* a ...

  4. 【2016-11-5】【坚持学习】【Day20】【Linq where in 语句】

    今天用到一个where  in  LINQ 语句 IEnumerable<Line> lines = wf.Lines.Where(n => n.RightNode == formR ...

  5. 利用setns()将进程加入一个新的network namespace

    1.首先使用docker创建一个容器,并获取该容器的network namespace monster@monster-Z:~$ docker run -itd --name test ubuntu ...

  6. NOIP2001 一元三次方程求解[导数+牛顿迭代法]

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  7. jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL

    |- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql)  : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...

  8. 通过接口实现JAVA和.NET互调用-JNInterface

    使用C#编程多年,也十分感激微软在语言架构.语法糖.编辑器等方面给自己带来的便利.但因为最近工作中有接触到JAVA,渐渐地发现的确像大家说的那样,JAVA的生态很好,要找点什么几乎都有现成的,于是自然 ...

  9. Codeforces Canda Cup 2016

    A.B:模拟 C.构造下就行了 D.题意:n个参加ACM的队(n<=300000),每个队都有自己的初始气球数和重量,规定如果气球数>重量,那么此队就会飞起来,淘汰出局,你现在是第一组,你 ...

  10. 网易蜂巢微服务架构:用RabbitMQ实现轻量级通信

    本次分享内容由三个部分组成: 微服务架构与MQ RabbitMQ场景分析与优化 RabbitMQ在网易蜂巢中的应用和案例分享 1微服务架构与MQ 微服务架构是一种架构模式,它将单体应用划分成一组微小的 ...