使用C编程检测PC上的电源故障

时间:2017-07-20 15:16:30

标签: c linux

我想使用C编程检测PC上的电源故障,wincon.h中的CTRL_LOG_OFF,CTRL_SHUTDOWN等函数很少..如何使用c编程处理意外电源故障?

2 个答案:

答案 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)。此文件的单字母值将指示系统电源的状态。国家包括:

  • &#39; F&#39;失败的力量。由于外部(或建筑物)电源故障,UPS正在通过备用电池提供应急电源。
  • &#39; L&#39;低电量。由于外部(或建筑物)电源故障,UPS正在通过其备用电池提供应急电源。然而,UPS电池备份至关重要。系统应立即关闭(在接下来的两分钟内)。
  • &#39; O&#39;电源好的。外部(或建筑物)电力已恢复。

SIGPWR的其他示例可能与具有多个(备用/冗余)电源的系统或具有自己的电池电源的笔记本电脑相关联。