长话短说,我正在尝试编写一个可以检查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
传递给它。问题是我不知道那些到底是什么。文档中几乎每个函数都有这个问题。他们都期待一些我不知道如何提供的模糊的东西。
所以这里是大部分问题:有人有吗?working我可以看一下这个库的例子吗?或者至少有人知道如何为这些函数提供它们所需的值?
EDIT:
由于似乎没有人对这个库了解很多,所以有人知道获取温度的不同方法吗?
您可以通过浏览源代码了解如何使用该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;
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)