linux系统函数fwrite、fflush使用及注意事项
- 问题的产生
- 解决办法
问题的产生
- 最近在重新嵌入式远程升级updateApp时,发现文件已经接收完毕,也调用了fwrite函数接口,进入到ARM linux系统中却发现写入的文件大小为0????
- 一猜想肯定是fwrite函数出了问题,于是乎对该接口进行了一些研究果然发现存在缓冲区的,fwrite向文件中写入一些数据,并没有及时的同步到磁盘上,而是在内核缓冲区中暂留,等到程序结束的时候会被刷新都磁盘文件。
解决办法
- 靠fflush()函数
#include
int fflush(FILE *stream)
/*该函数的作用就是刷新缓冲区*/
- 做法是,在写入的数据在函数结束之前就需要的时候,调用fwrite等函数后,紧接着调用fflush()函数将缓冲区刷新,这样数据就会被立刻写入文件而不用等到程序结束(因为之前的数据都在缓冲区里)。
可以用下面的实例进行测试:
int main()
{
FILE *fp = fopen("./a.txt", "a");
if(fp == NULL)
{
printf("open file err!n");
return -1;
}
fwrite("aaaaa", 5, 1, fp);
// 刷新到磁盘
//fflush(fp);
close(fp);
while(1)
{
sleep(5);
}
return 0;
}
如上程序,当程序一直不退出的时候,虽然已经调用了fwrite但是数据却在缓冲区里,而并不在文件中,这时你可以查看改路径下的a.txt文件,你会发现文件已经建立但是大小为0,如果你在fwrite之后用fflush函数后数据就会立刻写入文件,希望对小伙伴们有帮助。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net