牛骨文教育服务平台(让学习变的简单)
博文笔记

C语言 fwrite 覆盖文件原始数据问题

创建时间:2017-04-21 投稿人: 浏览次数:1402

最近在整项目时发现向文件中嵌入数据时,数据会丢失,但是server端明明写入成功了,但是client端在接收时显示原来应该有数据的位置,什么都没有。期初怀疑是后来的数据覆盖了前面写入的数据,结果经过diff返现,应该有数据的位置压根没被改动过。

step 1:可能是缓存的问题,所以在fwrite之后用了fflush方法,清空下缓存。结果没什么用。

step 2:可能是缓冲区的问题,所以用setbuf 和setvbuf方法设置自己的缓冲区。结果依然没什么用。

step 3:经过百度发现了这篇帖子 http://blog.csdn.net/sctq8888/article/details/7409985

这里提到了 fflush()只保证了将IO缓冲写入系统缓冲中,使IO读操作能成功,但系统什么时候写入磁盘,由系统决定所以这里在fwrite之后要强制将数据写回文件中,也就是用如下方法(基于linux系统下)

#include <unistd.h>

int fd = fileno(fp); //获取文件描述符
fsync(fd); //强制写硬盘

最终顺利解决了问题

PS:后来测试发现,不同的SD卡也会对程序的执行有影响,好在大部分SD卡都是可以的,只有极少数厂商的SD卡会出现问题。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。