sysctl编程读电池状态

2009-05-13 15:40:58来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


                                    一直都是用FVWM,而且是最简单的那种配置。各方面都很满意,就是在笔记本上不能知道电池状态是个遗憾,今天总算彻底解决了这个问题,解决问题的思路是调用sysctl读取电池装态。
$man 3 sysctl
还是看man就可以了:) 主要关注 sysctlbyname方法,对于电池状态,我只读取以下两项,

hw.acpi.battery.life
hw.acpi.battery.state
顺便把系统时钟也显示出来,以替换原来使用的xclock。

               
               
               
               
               
#include stdio.h>
#include signal.h>
#include unistd.h>
#include sys/time.h>
#include sys/types.h>
#include sys/sysctl.h>
void updateClock(int sig){
  int life, state;
  size_t len = sizeof(int);
  sysctlbyname("hw.acpi.battery.life",&life,&len,NULL,0);
  sysctlbyname("hw.acpi.battery.state",&state,&len,NULL,0);
  char* color;
  if(state != 1){
    // AC online
    color = "0;32m"; //
  }else{
    // Battery
    color = (life  30) ? "0;41m" : "0;42m";
  }
  
  time_t now = time(NULL);
  printf("\x1b[0;0H\x1b[0;%s%3d\x1b[0m %s", color,life, ctime(&now));
}
int main(int argc, char** args){
  printf("\x1b[2J\x1b[0;0H"); // clear screen
  struct itimerval timer = {{1,0}, {1,0}};
  int err = setitimer(ITIMER_REAL, &timer, NULL);
  if(err  0){
    printf("%d: %s\n",err,"Can not set itimer");
    return err;
  }
  signal(SIGALRM, updateClock);
  for(;;)pause();
}
               
               

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:ANSI Terminal Control Escape Sequences

下一篇:DHT 版本的 BitStormLite 基本完成了。