推荐给好友 上一篇 | 下一篇

sysctl编程读电池状态

一直都是用FVWM,而且是最简单的那种配置。各方面都很满意,就是在笔记本上不能知道电池状态是个遗憾,今天总算彻底解决了这个问题,解决问题的思路是调用sysctl读取电池装态。BSD爱好者乐园mF!y9}&oK?5I

ntn5eissE$man 3 sysctlBSD爱好者乐园2s#K:N2~9o8]g(} J

4D$~3E@jb还是看man就可以了:) 主要关注 sysctlbyname方法,对于电池状态,我只读取以下两项,BSD爱好者乐园9cj(Qf2{1r Q
BSD爱好者乐园0u:y7c:k1cG*OE%W
hw.acpi.battery.lifeBSD爱好者乐园T_DW-^,m(n LM
hw.acpi.battery.stateBSD爱好者乐园6i%RXS9xl6x'Br n(s

3G0\/O Hu顺便把系统时钟也显示出来,以替换原来使用的xclock。
nWG,Ai)Y'rD
9L/P-Y1H8w,Jah
N@RC$dpv\-C1.png

CODE:BSD爱好者乐园l)W*X@h@

#include <stdio.h>BSD爱好者乐园YKgm\ aOS6[$l
#include <signal.h>BSD爱好者乐园 OX.c X#[{~
#include <unistd.h>
%h$Y;w \6p\Q#include <sys/time.h>BSD爱好者乐园4Y]7sYT
#include <sys/types.h>
1|Ks*TYk#M#include <sys/sysctl.h>
!}s0DlKAq5S
M-b];?(IOV/mI/Rvoid updateClock(int sig){
? ]^/C"q$C;Lsy q(zBSD爱好者乐园(W!\a/u6g%?!g
  int life, state;BSD爱好者乐园1?Px.j0h8Mkh;u0N-M
  size_t len = sizeof(int);BSD爱好者乐园uWkK6h{+m
  sysctlbyname("hw.acpi.battery.life",&life,&len,NULL,0);BSD爱好者乐园v| m&pAO-|Ip w
  sysctlbyname("hw.acpi.battery.state",&state,&len,NULL,0);
7u`T7J,^&ii} r
Zs#c,w_9xZ4R  char* color;
!f*O_7S"A/j3B  if(state != 1){
2W U a8|CQsY    // AC onlineBSD爱好者乐园#K+G*TgTk
BSD爱好者乐园P)Zi.})?r}9[9Q
    color = "0;32m"; //BSD爱好者乐园Y3?c&f ?"\:u
BSD爱好者乐园0T C%h?S})aV+K0E
  }else{
u0Hq"Ac7oG%h ?F$s1R    // BatteryBSD爱好者乐园8I/QbJp$H

!NHW `9R%c    color = (life < 30) ? "0;41m" : "0;42m";BSD爱好者乐园1hD(Q&^(B
  }
;Y$b7W5n.p,`k  BSD爱好者乐园w%[q'qrsH
  time_t now = time(NULL);
~2BV PLjJE  printf("\x1b[0;0H\x1b[0;%s%3d\x1b[0m %s", color,life, ctime(&now));
1i-ir;HE(F$Ps(QBSD爱好者乐园i1L {:I5M&X]
}BSD爱好者乐园!AGP#Mu/U+T%s9n
BSD爱好者乐园G8|5H8@5Ya.@U
int main(int argc, char** args){
#` b;{'Au*^0Q#Xb!h  printf("\x1b[2J\x1b[0;0H"); // clear screenBSD爱好者乐园8o2F^,h"G

Di`!eri,~&vBSD爱好者乐园&jl'?){q([V
  struct itimerval timer = {{1,0}, {1,0}};
7Vrn'MB  int err = setitimer(ITIMER_REAL, &timer, NULL);BSD爱好者乐园lT0\T5q^]'A`
  if(err < 0){
[:xA(ebwBn|c    printf("%d: %s\n",err,"Can not set itimer");BSD爱好者乐园 zh5Px"X1[TON
    return err;BSD爱好者乐园$ng/c.}K0Zh~0`/HD
  }
OrE8XQ ^
6},S p ?W;I @E:i  signal(SIGALRM, updateClock);
,lP~,d+v?#H*] j
Q r.[^3s"]-w O  for(;;)pause();
"{7U|y"H lraI}

[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: sysctl 电池
 

评分:0

我来说两句

seccode