一直不明白缓冲区,今天对缓冲区有了全面的认识。下面介绍缓冲区:
1.什么是缓冲区
缓冲区又叫缓存,是内存空间的一部分。就是在存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间叫缓冲区。
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区
2.缓冲区的作用
缓冲区时一块内存区,它用来在输入输出设备与cpu之间,用来缓存数据。它使得低速的输入输出设备和高速的cpu能够工作协调,
避免低速的输入输出设备占用cpu,解放出cpu,使其能够高效率工作。
3.缓冲区的类型
a.全缓冲
在这种情况下,当填满标准缓存后才能进行实际I/O操作。比如:对磁盘文件的读写
b.行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作,这是我们输入的字符先放到存放在缓冲区,等按下回车键
换行时才进行实际的I/O操作,比如键盘输入数据。
c.不带缓冲
就是不进行缓冲,标准错误输出情况stderr就是典型的不带缓冲。这使得出错信息可以直接尽快的显示出来。
4.缓冲区的刷新
a.下面情况会引发缓冲区的刷新
缓冲区满时;执行flush语句;执行endl语句;关闭文件;
所以缓冲区满或关闭文件时都会刷新缓冲区。进行真正的I/O操作。在c++中,可以用flush函数来刷新缓冲区,执行I/O操作并清
空缓冲区。例如:cout< 相当于 cout<<"\n"<
b.键盘操作行缓冲 getchar()函数
函数原型:int getchar();
当程序调用getchar()函数时。程序等待用户按键,用户输入的字符被存放在键盘缓冲区。直到用户按回车键(回车符也放在缓冲区)
为止。当用户键入回车之后,getchar()函数才开始从键盘缓冲区中的每次读入一个字符。也就是说,当程序调用getchar()函数时,程序
就等着用户按键,并等用户按下回车键返回。期间按下的字符存放在缓冲区,第一个字符作为函数返回值。继续调用getchar()函数,将
不再等用户按键,而是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完后,才等待用户按键。
|