IO缓冲区
2021-11-08 本文已影响0人
lxr_
//为了解决cpu与输入输出(键盘、显示器)设备速度不匹配的问题,设计了IO缓冲区
//标准IO提供三种类型缓冲模式:按块缓存,按行缓存和不缓存
//按块缓存也称为全缓存,即在填满缓冲区后才进行实际的设备读写操作;
//按行缓存是指在接收到换行符"\n"之前,数据都是先缓存在缓冲区的
//不缓存,就是允许直接读写设备上的数据
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
FILE* fp;
if ((fp = fopen("output.txt", "w")) == NULL)
{
perror("打开文件失败的原因是");
}
fputs("hello world\n", fp); //向文件写入字符串
getchar(); //从终端等待用户输入一个字符,如果用户没有输入而中断程序,fputs写入不会成功,因为先写入了缓冲区
fclose(fp); //调用fclose函数将缓冲区数据写入文件
//****************fflush(刷新缓冲区)与setvbuf(设置缓冲区模式)**************
//下面的例子在linux下可以测试成功,在windows测试不成功
char buff[1024];
memset(buff, '\0', sizeof(buff)); //缓冲区填充
setvbuf(stdout, buff, _IOFBF, 1024); //设置stdout数据流的缓冲区为buff,大小为1024,缓冲模式为按块缓存,而_IOLBF为按行缓存,_IONBF为不缓存
fprintf(stdout, "hhhhh"); //向stdout写入字符串
fflush(stdout); //刷新缓冲区
fprintf(stdout, "输入任意字符后才会显示改行字符\n");//再往stdout写入数据,而当缓冲模式设置为无缓冲时,不用用户输入字符,该行会先输出到终端
getchar(); //从终端接收用户一个输入字符
system("pause");
return 0;
}