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

sysctl编程读电池状态

一直都是用FVWM,而且是最简单的那种配置。各方面都很满意,就是在笔记本上不能知道电池状态是个遗憾,今天总算彻底解决了这个问题,解决问题的思路是调用sysctl读取电池装态。BSD爱好者乐园 S7Fr/qE ^"w7r.U
BSD爱好者乐园kS/I'y-e#vs
$man 3 sysctl
;cP+G9Kn2YxK
"O"?t3A0]vJ0h\还是看man就可以了:) 主要关注 sysctlbyname方法,对于电池状态,我只读取以下两项,
$u5Vj]~x0Hl7xA[
G;g)u%d u?hw.acpi.battery.lifeBSD爱好者乐园 gH'@([)L
hw.acpi.battery.state
TJ q~AOBSD爱好者乐园[%^&[T C{i/~U
顺便把系统时钟也显示出来,以替换原来使用的xclock。
{ aAThj-F6ZUpBSD爱好者乐园^:f3K7]$zA$E1D,} gi
BSD爱好者乐园'j/gNa&MbG;D
1.png

CODE:BSD爱好者乐园cF'c0y J0p+I%HT2x n#L

#include <stdio.h>
P ^2U h&H(P1y#include <signal.h>
)pkg`v#include <unistd.h>BSD爱好者乐园 J;I-F4f'x:~$e}
#include <sys/time.h>
[+?#a7^O){*X[#include <sys/types.h>BSD爱好者乐园%F ?.G:V"K,Ku:^3Bd
#include <sys/sysctl.h>
J$i7eh(B%dBSD爱好者乐园 \5i"?*b2[
void updateClock(int sig){BSD爱好者乐园b z c1]Hvz ?

D~wQ R-]"`  int life, state;
6_D x7v)Z(~8K g8Y;O  size_t len = sizeof(int);
\%^S-i/Oe/~  sysctlbyname("hw.acpi.battery.life",&life,&len,NULL,0);BSD爱好者乐园"hQ8f X-k
  sysctlbyname("hw.acpi.battery.state",&state,&len,NULL,0);BSD爱好者乐园kfMjcI9X
BSD爱好者乐园 R?$V&F9v9y6r1J
  char* color;
!|xdOc6W[  if(state != 1){BSD爱好者乐园CFK&pV C,_d
    // AC online
D,H,s5[8cpN4[
%s~ ~-u o]`c    color = "0;32m"; //
$S&J4^E N-B hK6]*q6U
~'G+m/g},L  }else{BSD爱好者乐园%ls;?'GkeqX-a
    // BatteryBSD爱好者乐园rpk-d }r~

$x \2A#PU3l0O'_t    color = (life < 30) ? "0;41m" : "0;42m";BSD爱好者乐园JvT/tiKPV JU
  }BSD爱好者乐园k'U8}4q;`r
  
o \]"[ l"y&s8K  time_t now = time(NULL);BSD爱好者乐园`|5{EfI nv
  printf("\x1b[0;0H\x1b[0;%s%3d\x1b[0m %s", color,life, ctime(&now));BSD爱好者乐园,h7lBv8y#?u4~(I,k

v)Y,f+K,I h4S n+a}BSD爱好者乐园B A0C5v1J@([-D
BSD爱好者乐园A(Yqn m
int main(int argc, char** args){
Uqh+_#|z"h$z}  printf("\x1b[2J\x1b[0;0H"); // clear screenBSD爱好者乐园Pd8P4wY

!nDUq:`8T`MTBSD爱好者乐园kUp8tB V[
  struct itimerval timer = {{1,0}, {1,0}};
4ptL)W uB7g Wb  int err = setitimer(ITIMER_REAL, &timer, NULL);BSD爱好者乐园:R$|h4[,u2D&d c*s
  if(err < 0){BSD爱好者乐园~_ f%_#Il
    printf("%d: %s\n",err,"Can not set itimer");
X,C5d{xW    return err;
`S+tGi i1}+{  }
OCl.M?.h4l1I@BSD爱好者乐园Y)Pv8N3R
  signal(SIGALRM, updateClock);BSD爱好者乐园7}i8S._:] nZU5k
BSD爱好者乐园;i"o7SOYU m8p
  for(;;)pause();
A7N S+D1MtcXz}

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

评分:0

我来说两句

seccode