Linux写文件断电保存,linux 写文件操作,异常掉电后,文件损坏丢失(0kb)

news/2024/11/25 17:44:12/

今天调试程序,在做异常断电测试时,再开机发现文件是0 kb, 通过log查询,文件已经写入完成。不明白为何掉电之后文件就没了。 查到下面的博文解决了该问题。 通过 fflush->fsync->fclose解决该问题

一、问题描述

Linux系统,嵌入式程序开发。

程序运行过程中,有读写配置文件保存当前位置信息的操作。在程序运行过程中突然断电,或者异常终止程序,就会出现配置文件内容出错(内容清空)或者文件直接损坏而无法打开的情况。文件损坏时,可能报出segmentation fault的错误,以致程序没法正常运行。

二、问题分析

断电瞬间正在往磁盘写文件。

内容丢失:Linux为延迟写(delayedwrite),突然断电时,文件缓冲区中数据还未写入文件

文件损坏:文件系统内部结构不一致,导致文件系统破坏。

三、解决方法

三个方案, 时间紧的朋友可以直接看方案二。

方案一:我们自己在程序中先退出去,而不能让系统强制杀掉我们的程序。

在C程序中加入SIGINT响应函数,保证程序正常退出。

(1)Linux中的kill命令,会导致写文件失败。

大部分的程序都需要一个handler来应对SIGINT信号。只有正常退出,才能做到flush,保证写文件成功。

“Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止&#x


http://www.ppmy.cn/news/715006.html

相关文章

excel文件修复工具_OFFICE文件图标空白的修复方法(亲测有效)

前两天,我的一位同事反馈他的电脑中OFFICE2016出现了问题,操作系统为WIN10,图标显示异常为空白,但不影响打开使用(只是该兄弟为强迫症患者,求我给修复好)。显示效果如下图: office图标显示空白 PS:造成这种情况的原因一般是装过WPS,卸载后又安装了OFFICE;又或者是win1…

VMware虚拟机配置文件(.vmx)损坏,提示移除,如何修复?

早起打开虚拟机,突然提示“文件损坏,是否移除?” 吓我一跳,里面的文件都没有上传到云端,虽然之前有过备份,但是昨天的数据肯定是没有备份的。 昨天还是好好的,怎么一打开就这样了? …

预防WinRAR文件损坏

有时在网上下载软件,解压的时候会弹出如下弹框(图片来自百度):不可预料的压缩文件末端,非常恼人! 一、原因 出现这种问题,有这么两种原因: 1、文件在服务器上就已经损坏了&#xf…

关于MongoDB collection***.wt 文件损坏后,无法修复也无法启动mongodb

PS:尝试修复之前,先把数据文件备份一份,免得修复过程中数据丢失 意外操作导致了mongoDB运行不了,原因是collection***.wt文件损坏 尝试 mongod --dbpath "/usr/***/****" --repair,但是会失败,具体的失败信…

数据库文件损坏修复实战笔记

今天终于碰到数据库文件头pfs损坏的案例。 环境:win server 2008sql 2008 R2 SP2 问题描述:db某些page损坏 问题定位: 1、执行DBCC CHECKDB(DB, REPAIR_ALLOW_DATA_LOSS) With No_InfoMsgs, All_ErrorMsgs, TableResults; Note: 需…

windows7系统损坏修复_UEFI?安装纯净的 Windows 7/10 系统

UEFI 支持 GPT分区表,至少可以分出128个分区,没有扩展分区和逻辑分区,最大支持18EB硬盘,相当于对硬盘容量没有限制。 本篇介绍 UEFI 加 GPT分区表安装原版 Windows 的方法。传统BIOS 加 MBR分区表安装系统还是需要UltraISO、Rufus…

关于【Windows 资源保护找到了损坏文件,但其中有一些文件无法修复】的解决方法

参考 问题描述 PS C:\Users\Qwer-laptop> sfc /scannow开始系统扫描。此过程将需要一些时间。开始系统扫描的验证阶段。 验证 100% 已完成。Windows 资源保护找到了损坏文件,但其中有一些文件无法修复。 对于联机修复,位于 windir\Logs\CBS\CBS.log…

电脑蓝屏重启后,js文件损坏或断电重启后文件损坏

问题来源:电脑蓝屏,重新用编译软件打开(我用的是优化过的eclipse,自称是内部工具/滑稽),发现js文件变成了空白,再次打开文件所在位置,打开文件,还是一样,重启电脑,重启编译工具没用。文件显示39.5kb,打开全是空白。 1.查找浏览器缓存 我用的是谷歌和IE, 在谷歌浏览…