我想使用C编程检测PC上的电源故障,wincon.h中的CTRL_LOG_OFF,CTRL_SHUTDOWN等函数很少..如何使用c编程处理意外电源故障?
答案 0 :(得分:0)
从意外电源故障中恢复的唯一方法是定期安全状态数据,以便您的程序可以a)在系统再次运行时重新启动,或b)可以在系统再次运行时恢复。
发生电源故障时,系统停止运行。有时,硬盘会设法刷新内部缓存缓冲区,因此文件系统是一致的。但总的来说,系统没有足够的电力来“关闭”,甚至让你的程序知道电源已关闭。甚至,当它可以告诉您的程序,并且可以告诉您系统上运行的所有其他100个程序时,没有足够的能力让这些程序执行任何操作以便以后恢复。最好的情况是系统可以将内存和状态转储到hibernate文件,但即使这样也没有足够的功率。
但是,如果你的系统是带电池的笔记本电脑,Windows会告诉巡演计划它改变了电源状态。程序收到WM_POWERBROADCAST消息。然后检查wParam参数以了解更改类型。有关此消息,请参阅Windows文档。
答案 1 :(得分:0)
当计算机断电时,CPU(以及所有其他系统外围设备)也会断电并无法继续执行指令。因此,C(或任何其他语言)代码不能依赖于捕获这样的灾难性事件,更不用说在事件发生时采取任何行动。
常用方法是记录文件中程序的状态。例如,当程序初始化时,它可以写一个"运行"状态到文件。当程序终止时,它会写一个"终止"状态到文件。这还允许程序在初始化之前检查文件状态,以查看程序是否先前正常终止。
<强> 更新 强>
SIGPWR在Linux中做了什么?
SIGPWR信号表示系统电源状态发生变化。
例如,SIGPWR信号可能由与&#34;不间断电源相关的进程发出&#34; (UPS)为Linux系统供电。相同(UPS)进程将状态信息写入文件:
/var/run/powerstatus
(或现已弃用,/etc/powerstatus
)。此文件的单字母值将指示系统电源的状态。国家包括:
SIGPWR的其他示例可能与具有多个(备用/冗余)电源的系统或具有自己的电池电源的笔记本电脑相关联。