1.什么是缓冲区
缓冲区是内存的一部分空间,用缓冲输入输出的数据。缓冲区又分为输入缓冲区和输出缓冲区。缓冲区又被称为缓存。
2.缓冲区存在的意义
主要的意义就是为了提高cpu的效率。
输入端。假如没有缓冲区,我们要从磁盘中读取数据,有几个字符,CPU就要读写几次,CPU是高速率的,而读取是低速率的,这样做会降低CPU的效率。相反如果将数据都存在缓冲区里面,等要读取的时候就可以一次性读取多数的数据。大大地提高了CPU的效率。
输出端。假如要将数据打印出来,打印机是低速的,CPU是高速的。将数据放入缓冲区,避免数据被分为多次打印,就此解放了CPU,使它能去处理其他任务。
3、缓冲区的分类
(1)行缓冲
遇到
就刷新缓冲区,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据和输出信息到屏幕(标准输入输出例如printf())。
(2)全缓冲
当缓冲区写满以后就会刷新缓冲区。当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写(例如fwrite())。
(3)无缓冲
即没有缓冲区,代表是系统调用(例如write());
5、缓冲区的提供者
首先介绍一下几个概念
(1)系统调用:操作系统直接暴露给用户的接口。
(2)库函数:把系统调用进行二次封装之后给用户使用的结果叫做库函数(封装系统调用,实现相同的复杂逻辑,节省工作量)
(3)因此库函数和系统调用具有层级关系,库函数是系统调用的上层(以f开头的函数如fwrite都是库函数,去掉f如write是系统调用)
(4)系统调用不具有缓冲区,库函数具有缓冲区,而库函数是系统调用的上层,因此,缓冲区是C语言库提供的。具体一点是由库中的文件操作符提贡的