对于3.4.NN内核当前电池电量和最大可以达到在/sys/class/power_supply/BAT*
可用(通常BAT0
,你通常只有一个电池)中的文件charge_now
和charge_full
。因此,遵循以下方面的内容应符合您的需求。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
#include <linux/limits.h>
#include <regex.h>
#define _DATADIR "/sys/class/power_supply"
int main(int argc, char **argv) {
FILE *f_c, *f_f;
long current, full;
DIR *d;
struct dirent *dp;
char b[PATH_MAX];
if((d = opendir(_DATADIR)) == NULL) {
fprintf(stderr, "opendir: %s\n", strerror(errno));
return 3;
}
while((dp = readdir(d)) != NULL) {
snprintf(b, PATH_MAX, "%s/%s", _DATADIR, dp->d_name);
regex_t regex;
if(regcomp(®ex, "BAT[[:alnum:]]+", REG_EXTENDED) != 0) {
fprintf(stderr, "regcomp: %s\n", strerror(errno));
return 4;
}
if(regexec(®ex, b, 0, NULL, 0) == 0) {
snprintf(b, PATH_MAX, "%s/%s/%s", _DATADIR, dp->d_name, "charge_now");
f_c = fopen(b, "r");
snprintf(b, PATH_MAX, "%s/%s/%s", _DATADIR, dp->d_name, "charge_full");
f_f = fopen(b, "r");
if(f_c != NULL && f_f != NULL) {
if(fscanf(f_c, "%ld", ¤t) != 1 || fscanf(f_f, "%ld", &full) != 1)
fprintf(stderr, "fscanf: %s\n", strerror(errno));
else
fprintf(stdout, "charge for %s %.2f\n", dp->d_name,
(current/full) * 100.0);
fclose(f_c);
fclose(f_f);
}
}
regfree(®ex);
}
return 0;
}
从[upower] [http:// packages]的[源代码](http://git.debian.org/?p=pkg-utopia/upower.git;a=summary)开始。 ubuntu.com/source/precise-updates/upower) –
什么是“内置的UNIX命令”? – arkascha
命令如cd,ls,date,jobs,kill,exit – Umut