有没有人能够正确使用libsensors?

时间:2011-12-19 02:32:48

标签: c++ linux temperature

长话短说我试图编写一个可以检查cpu温度的应用程序。使用libsensors(3)手册页我已经能够至少获得libsensors_version数字。截至目前,这是我的代码:

#include <sensors/sensors.h>
#include "SensorData.h"
#include <string>
#include <sstream>


using namespace std;

SensorData::SensorData()
{
   sensors_init(NULL);
}

SensorData::~SensorData()
{
    sensors_cleanup();
}

string SensorData::GetVersion()
{
    ostringstream Converter;
    Converter<<"Version: "<<libsensors_version;
    return Converter.str();
}

void SensorData::FetchTemp()
{
    //sensors_get_value()
}

使用手册页我知道sensors_get_value需要

const sensors_chip_name *name
int subfeat_nr
double *value 

传递给它。问题是我不知道究竟是什么。几乎文档中的每个功能都有这个问题。他们都期望我不知道如何供应模糊的东西。

所以这里有大部分问题:有没有人有我可以看到的这个库的工作示例?或者至少有人知道如何为这些功能提供他们需要的值吗?

修改

由于似乎没有人对这个库有太多了解,有没有人知道一种不同的温度变化方法?

2 个答案:

答案 0 :(得分:14)

您可以通过浏览源代码了解如何使用API​​。 sensors程序的代码不是太复杂,无法遵循。

为了帮助您入门,这是一个快速的功能:

  • 枚举所有筹码
  • 列举了他们的所有功能
  • 打印其可读子功能的值

您可以按原样将它添加到现有的骨架类中。

(此代码仅供演示之用,未经过彻底测试。)

void SensorData::FetchTemp()
{
    sensors_chip_name const * cn;
    int c = 0;
    while ((cn = sensors_get_detected_chips(0, &c)) != 0) {
        std::cout << "Chip: " << cn->prefix << "/" << cn->path << std::endl;

        sensors_feature const *feat;
        int f = 0;

        while ((feat = sensors_get_features(cn, &f)) != 0) {
            std::cout << f << ": " << feat->name << std::endl;

            sensors_subfeature const *subf;
            int s = 0;

            while ((subf = sensors_get_all_subfeatures(cn, feat, &s)) != 0) {
                std::cout << f << ":" << s << ":" << subf->name
                          << "/" << subf->number << " = ";
                double val;
                if (subf->flags & SENSORS_MODE_R) {
                    int rc = sensors_get_value(cn, subf->number, &val);
                    if (rc < 0) {
                        std::cout << "err: " << rc;
                    } else {
                        std::cout << val;
                    }
                }
                std::cout << std::endl;
            }
        }
    }
}

答案 1 :(得分:2)

Gnome面板Sensors applet与libsensors(和其他后端)一起使用; Sourceforge提供了完整的资源,点击此处:http://sensors-applet.sourceforge.net/index.php?content=source

...特别是,libsensors插件看起来相当清晰......我相信这应该是一个可用的gitweb链接直接到该代码:http://sensors-applet.git.sourceforge.net/git/gitweb.cgi?p=sensors-applet/sensors-applet;a=blob;f=plugins/libsensors/libsensors-plugin.c;h=960c19f4c36902dee4e20b690f2e3dfe6c715279;hb=HEAD