嵌入式Linux标准IO,刷新流fflush()

刷新流

  1. 全缓冲:当流的缓冲区满的时候,自动刷新
    行缓冲:当流的缓冲区满的时候/当流的缓冲区中遇到换行符的时候,自动刷新
  2. 流关闭的时候。当流关闭的时候,系统自动检查,如果缓冲区中还有数据,会把数据写到实际的文件中,去刷新这个流
  3. 通过函数fflush刷新流

代码分析

1. while(1)死循环,使流一直不能关闭,字符串在缓冲区里,并没有被写入到文件中

#include <stdio.h>

int main(int argc, const char *argv[])
{
	FILE *fp;

	if((fp = fopen("test.txt","w")) == NULL)//fopen()打开一个普通文件时,默认是全缓冲
	{
		perror("fopen");
		return -1;
	}
	fputs("abc\n",fp);//此时,往流中写入的字符串只是在流的缓冲区里,只有当缓冲区满,或流关闭的时候,缓冲里的内容才会写到实际的文件中

	//fflush(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);

	//fflush(fp);
	//while(1);

	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;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37542524/article/details/83628395