Warm tip: This article is reproduced from serverfault.com, please click

c++-如何在Ubuntu中读取电池电量?

(c++ - How to read the battery level in Ubuntu?)

发布于 2020-12-17 07:46:09

我搜索了一段时间,没有任何特殊的库或任何东西,却花了一段时间才找到可以正常工作的东西。

可以使用

/sys/class/power_supply/BAT0/subsystem/BAT0/charge_now
/sys/class/power_supply/BAT0/subsystem/BAT0/charge_full

我想知道,在Ubuntu 18.04中使用C / C ++是否有更好的方法来获取电池状态

Questioner
Nir Geffen
Viewed
11
Nir Geffen 2020-12-18 21:06:40

万一这从未得到答案..这是我的解决方案:

#define PATH_BATT_CHARGE_NOW "/sys/class/power_supply/BAT0/subsystem/BAT0/charge_now"
#define PATH_BATT_CHARGE_FULL "/sys/class/power_supply/BAT0/subsystem/BAT0/charge_full"


int getBattState(void)
    {
        int chargedPercent = 0;

        FILE *battChargeNow;
        FILE *battChargeFull;
        long unsigned int battMax_mAh = 0;
        long unsigned int battRemain_mAh = 0;

        if (NULL == (battChargeNow = fopen(PATH_BATT_CHARGE_NOW, "r")))
        {
            fclose(battChargeNow);
            return -1;
        }
        if (NULL == (battChargeFull = fopen(PATH_BATT_CHARGE_FULL, "r")))
        {
            fclose(battChargeNow);
            fclose(battChargeFull);
            return -1;
        }

        fscanf((FILE *)battChargeFull, "%lu", &battMax_mAh);
        fscanf((FILE *)battChargeNow, "%lu", &battRemain_mAh);

        chargedPercent = 100.00 * ((float)battRemain_mAh / (float)battMax_mAh);
        return chargedPercent;
    }