断电重启后flash 数据异常
最近需要在linux保存数据,定义了一个结构体,在需要保存数据的时候,我在打开文件之后,定位到文件开始的地方,然后写入结构体字节数的数据,查看写入的字节数等于结构体的大小;但当我重新上电后,发现读该文件,数据不正确,有时候数据是前一次写入的数据,有时候数据出错了,不知道哪里出了问题,请有经验的兄弟提醒一声! 补充1点:flash 是核心板的nandflash,不是eeprom 你应该这么修改文件(假设你修改的文件名是A)1.复制A到文件B
2.修改文件B
3.同步文件内容(sync,fsync或者fflush)
4.重命名文件B的名称为A(rename)
这样才能保证意外断电造成的数据损坏。 ryq0110 发表于 2017-10-26 09:08
你应该这么修改文件(假设你修改的文件名是A)
1.复制A到文件B
2.修改文件B
首先谢谢你的意见,
但我不是意外断电,我是主动的断电,现在我的疑惑是,为什么我明明写了文件了,但重启后再次读文件失败了! 本帖最后由 ryq0110 于 2017-10-26 09:19 编辑
严格按照我上面说的操作。
因为你没有执行第3步,将缓冲区数据同步到文件。
其实如果在实行第3步的过程中断电,文件内容可能被破坏。
所以想正确修改一个文件,严格按照上面的操作,因为第4部是原子操作,不会破坏数据A的完整性。 第一,你可能没有执行sync,将缓冲的数据通过驱动刷新到Flash中。
第二,你可能是使用了Readonly挂载的文件系统,或是将节点挂载了ramfs或tmpfs之类的内存文件系统。
页:
[1]