在程序中读写文件要考虑突然掉电情况下的保护.当我们打开一个文件进行读操作时,系统会先把文件内容取出放到RAM里,突然掉电是不会损坏文件的;当我们写文件时,系统会在RAM里开辟一块区域,写的内容先放进这块区域中,系统适时成批写入文件.(linux里的sync命令可强制把写的内容放入文件).如果突然断电,未写入文件的内容就丢失了.对于重要的配置文件而言,如果文件内容不完整,会使系统无法正常工作.
操作系统(文件系统)对文件有保护机制,比如文件打开了,掉电了,操作系统应该是自动关闭文件.从整个文件系统来说,突然掉电会造成文件系统资料的不一致,下次启动时会重整文件系统.但光有操作系统的保护机制是不够的.
配置文件在系统运行时时常要修改某些配置,那么怎样才能防止突然掉电损坏文件呢?下面以一个文本文件型的配置文件的修改为例探讨一下这个问题.
文本型的配置文件的修改可以这样进行:
step1:打开配置文件,然后新创建一个文件.
step2:用fgets一行行读出配置文件内容,检查内容,如果是要修改的修改之,然后用fputs写入新文件.
step3:关闭配置文件和新文件
step4:删除配置文件.
step5:把新文件改名为配置文件.
按这个做法,如果执行完step4后突然掉电,下次启动后就没有配置文件了,为了解决这个问题可以在step1中打开配置文件时若发现配置文件不存在,可以重建一个缺省配置的配置文件.
这个方法可保证配置文件不至丢失或内容不完整,缺点是重建的配置文件是缺省配置.也可以发现配置文件丢失后,把那个'新文件'改名为配置文件.
原文链接:https://blog.youkuaiyun.com/yuhaisiming/article/details/5874281