标准io

来源:互联网 发布:赢富数据 编辑:程序博客网 时间:2024/05/01 13:18

   关于标准io,就涉及到很多的知识,,系统调用,缓冲区,流的概念。。。


那么标准io指什么?  ---> ANSIC 中定义的用于io操作的一系列函数,即为输入输出操作的相关函数。 在这么我们不能认为输入输出就是用鼠标键盘写东西,再从文件中打印东西到屏幕上,而是对于流的操作,流入流出。

在linux系统里有一句话叫做,everything is file,一切皆文件

意思是你所看到的都可以理解为文件,那么我们的键盘,鼠标,系统,都可以看成文件,我们利用流来进行操作文件。

那么,什么是流???

水是怎么来的?水的化学式h2o,这样两个氢原子加上一个氧原子就构成了一个水分子,而无数的水分子构成了水滴,无数的水滴又构成了水流,水流形成江河大海。。。

类似的,我们计算机中的流也可以这么看:由无数基本单位组成的“水流”,那么我们的单位看成什么?我们都知道计算机使用二进制数来存储数据,那么一个字节是8个bit位,每个bit位由0\1来描述,那么无数个字节就构成了  ----------字节流。

假设我有一个普通文件,里面写满了英文字母,那么我们从中读出数据,是不是把里面的字节全部读出?就像水流一样“流出”,“流入”屏幕上。

字节流可分为文本流和二进制流,具体差异在哪里就不一一赘述,可百度查看。


我们标准io的核心对象就是流。当我们调用标准io相关函数操作一个文件时,就会创建一个名叫  FILE 的结构体,用于描述该文件,这个结构体,我们形象的称为 流。

通过FILE 创建的流  ,我们可实现对文件的相关操作,写入,读取,删除,查看相关属性,通过流,文件就像橡皮泥一样,想怎么捏就怎么捏,当然,也不能随意的瞎操作。。。


标准io中,存在缓冲区,分为三种类型: 全缓冲------------->填满io缓冲区后,才进行实际的io操作

行缓存------------>输入输出遇到换行符\n 执行io操作

无缓存-------------->不对io操作进行缓冲。典型的有标准出错流 stderror


为什么加缓冲区???

在我们对文件进行操作时, 实际上是对系统进行调用,过程中,linux需要从用户态切换到内核态,这样我们每次进行读写都要频繁的切换状态,这样对系统的开销很大,

所以不如建立一个缓冲区,一次性的读完或者写完放进缓冲区,在进行系统调用,从缓冲区读出写,可以大大的减少系统的开销。



这些就是标准io的基本概念。

原创粉丝点击