刷新文件缓冲区的三种方法:
a>缓冲区满
b>fflush函数强制刷新
c>程序正常退出
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void buffer_area() {
FILE* fp = fopen("buffer.txt", "w");
if (!fp)
{
perror("open");
return -1;
}
fputs("hellodemo", fp);
while (1);
}
int main() {
buffer_area();
return 0;
}
buffer_area函数中,有一个死循环while (1);
,这个死循环前面有一个写函数fputs("hellodemo", fp);
,按理说,在死循环开始前,hellodemo已经被写入了文件中,但此时打开文件却什么都没有。原因是这些内容都在缓冲区,当缓冲区被刷新的时候,就能写入到文件中,这里只有等到main函数执行结束,程序征程退出,才能刷新缓冲区。
如果加入fflush函数,那么是强制刷新缓冲区,不需要等待程序退出。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void buffer_area() {
FILE* fp = fopen("buffer.txt", "w");
if (!fp)
{
perror("open");
return -1;
}
fputs("hellodemo", fp);
fflush(fp);
while (1);
}
int main() {
buffer_area();
return 0;
}
在Windows中,stdout没有缓冲区,printf("xxxx");
直接输出到屏幕上。而在Linux中,stdout是有缓冲区的,printf("xxxx");
输出的内容是先到缓冲区中,然后到屏幕;但是如果要显示的字符串有\n,例如printf("xxxx\n");
是能够刷新缓冲区的,也就是能即时显示到屏幕上。
对于标准输入stdin,不能调用fflush强制刷新缓冲区,Windows和Linux都不行。