刷新流
- 全缓冲:当流的缓冲区满的时候,自动刷新
行缓冲:当流的缓冲区满的时候/当流的缓冲区中遇到换行符的时候,自动刷新
- 流关闭的时候。当流关闭的时候,系统自动检查,如果缓冲区中还有数据,会把数据写到实际的文件中,去刷新这个流
- 通过函数fflush刷新流
代码分析
1. while(1)死循环,使流一直不能关闭,字符串在缓冲区里,并没有被写入到文件中
#include <stdio.h>
int main(int argc, const char *argv[])
{
FILE *fp;
if((fp = fopen("test.txt","w")) == NULL)
{
perror("fopen");
return -1;
}
fputs("abc\n",fp);
while(1);
return 0;
}
2. 去掉while(1)死循环,则流会关闭,关闭前自动刷新,缓冲区中的内容会被强制保存进文件
#include <stdio.h>
int main(int argc, const char *argv[])
{
FILE *fp;
if((fp = fopen("test.txt","w")) == NULL)
{
perror("fopen");
return -1;
}
fputs("abc\n",fp);
return 0;
}
3. 使用fflush()强制刷新流,缓冲区中的内容会被写入文件
#include <stdio.h>
int main(int argc, const char *argv[])
{
FILE *fp;
if((fp = fopen("test.txt","w")) == NULL)
{
perror("fopen");
return -1;
}
fputs("abcdef\n",fp);
fflush(fp);
while(1);
return 0;
}