C语言(补):
输入输出缓冲机制
概述:
缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,
这些存储空间用来缓冲输入 或者输出的数据,这部分预留的空间叫做缓冲区。缓冲区根据其对应的是
输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
为什么要有缓冲区
1)减少IO设备的操作
2)提高计算机的运行速度。
比如:我们从磁盘里读取信息,先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓
冲区的数据取完后再去磁盘中读取,这样就减少磁盘的读写次数,再加上计算机对缓冲区的操作大大
快于磁盘的操作,故应用缓冲区可大大提高计算机的运行速度
缓冲区的类型
全缓冲:当填满缓冲区之后,才会进行实际IO操作。 比如 对磁盘文件的读写。 —window 全缓冲大小
4096字节 linux 全缓冲大小 1024字节
行缓冲:当在输入和输出中遇到换行符时,执行真正的IO操作,也就是冲刷缓冲区的数据。比如键盘
输入数据
不带缓冲:也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示
出来。
引发缓冲区的刷新
1、遇到换行符\n
2、缓冲区满(溢出)
3、执行fflush(stdout),手动刷新缓冲区
原理实现
解释:输入输出缓冲机制是一种技术,旨在提高数据传输的效率和稳定性。这种机制通过在输入输出过程中引入缓冲区,使得数据不是直接从源传输到目标,而是先存储在缓冲区中,然后再从缓冲区中读取数据传输到目标。
案例:
需求:将一张BMP图片显示到开发板的LCD屏幕上
说明:
屏幕显示:BGR
图片显示:RGB
实现:RGB --> BGR
B:右移0个字节,也就是移动0位 B >> 0
R:右移2个字节,也就是移动16位 R >> 16
ush(stdout),手动刷新缓冲区
原理实现
[外链图片转存中…(img-axLhK3pf-1721907207649)]
解释:输入输出缓冲机制是一种技术,旨在提高数据传输的效率和稳定性。这种机制通过在输入输出过程中引入缓冲区,使得数据不是直接从源传输到目标,而是先存储在缓冲区中,然后再从缓冲区中读取数据传输到目标。
案例:
需求:将一张BMP图片显示到开发板的LCD屏幕上
说明:
屏幕显示:BGR
图片显示:RGB
实现:RGB --> BGR
B:右移0个字节,也就是移动0位 B >> 0
R:右移2个字节,也就是移动16位 R >> 16
G:右移1个字节,也就是移动8位 G >> 8