关于Linux的缓冲机制

缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

通常我们将缓冲区分为三种
一.全缓存
刷新的条件:
1.当缓存区域过满的时候会刷新(通常为4096byte,当超过4096byte才会刷新)。
2.当程序正常退出或者结束时会刷新。(调用exit或者return函数时)
3.调用ffush()函数刷新缓存时。
通常我们使用标准C库函数对文件的操作为全缓存。

int main()
{
	i = 0;
	for (i = 0; i < 4096; i++)
		printf("A");
	while(1);
	return 0;
}

输出结果操作:
此时我们进行结果输出时用 > 重定向输出到文件中,此时文件中什么也没有,因为此时缓存刚满,并没有越过界限,所以缓冲区不会刷新。
要想把A输出到文件中:
1.我们把循环条件改为大于4096的数(i <4097),此时超过行缓存的最大值,这时,打开文件里面上会显示A。
2.去掉while(1)让程序正常结束。
3.在while(1)前面加上ffush(stdout)刷新输出缓冲区。

二.行缓存
刷新的条件:
1.当缓存区域过满的时候会刷新(通常为1024byte,当超过1024byte才会刷新)。
2.当程序正常退出或者结束时会刷新。(调用exit或者return函数时)
3.调用ffush()函数刷新缓存时。
4.遇到 ‘\n’ 的时候会刷新。
通常我们使用标准C库函数对终端进行输入和输出操作的文件使用行缓存。

int main()
{
	i = 0;
	for (i = 0; i < 1024; i++)
		printf("A");
	while(1);
	return 0;
}

输出结果:
此时我们发现什么终端上面什么都没有,因为此时缓存刚满,并没有越过界限,所以缓冲区不会刷新,A也在缓冲区中没有输出出来。

要想把A输出到屏幕上:
1。我们把循环条件改为大于1024的数(i <1025),此时超过行缓存的最大值,这时,屏幕上会输出A.
2.去掉while(1)让程序正常结束。
3.在while(1)前面加上ffush(stdout)刷新输出缓冲区。
4.在while(1)前面加上printf("\n")刷新缓冲区。

三.不缓存
特点:没有 缓存,每次都是直接调用系统接口。
例如:stderr

默认情况下,打开的文件都是全缓存类型。当于终端相关联的时候,就是行缓存。
例如:stdin 、stdout是行缓存。
Stderr是不缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值