前言
工具型的项目,多少要跟硬件打交道,我在国产系统中开发的QT项目也多是工具,下面罗列涉及到与硬件相关的开发调研项。
获取CPU信息
lscpu
可以列举出芯片等信息,cat /proc/cpuinfo
可以更详细一些的内容,但有用度低。
dmidecode
dmidecode主要是存储硬件设备厂商按照标准化填写的硬件信息,信息非常丰富,比如可以获取到CPU的ID和序列号,作为本系统的唯一值(比如注册激活功能会用到):
//获取CPU ID
dmidecode -t Processor | grep ID |head -n1 |awk -F 'ID:' '{print $2}'
//获取CPU 序列号
dmidecode -t Processor | grep Serial |awk -F ': ' '{print $2}'
获取CPU名称:
dmidecode -t processor|grep Manufacturer|awk -F ':' '{print $2}'
获取内存信息
通过文件/proc/meminfo获取,内存总大小可以通过累加获取
std::string getMemTotal()
{
std::string result = "0";
char cmdstr[100]="cat /proc/meminfo |grep MemTotal";
char buffer[128]={0};
FILE* pipe = popen(cmdstr, "r");
if (!pipe) {
std::cerr << "Error opening pipe" << std::endl;
return "";
}
while (fgets(buffer, 128, pipe) != NULL) {
//std::cout << "buffer: " << buffer << std::endl;
// 按照 ' ' 分割字符串 MemTotal: 8082664 kB
std::vector<std::string> strlist = split(buffer, ':');
if(strlist.size()<2) continue;
//std::cout << "buffer: " << strlist[1] << std::endl;
std::string memorystr=strlist[1];
int number = std::atoi(memorystr.c_str());
//double size = number/1024/1024.0;
int size = number/1000/1000;
result = std::to_string(size);
}
pclose(pipe);
result += "GB";
}
获取硬盘大小
通过命令lsblk获取,也是通过累加方式
std::string getDisksize(){
std::string result = "";
char cmdstr[100]="lsblk|grep disk|awk -F ' ' '{print $4}'|tr -d '\n'";
char buffer[128]={0};
FILE* pipe = popen(cmdstr, "r");
if (!pipe) {
std::cerr << "Error opening pipe" << std::endl;
return "";
}
while (fgets(buffer, 128, pipe) != NULL) {
result += buffer;
}
pclose(pipe);
return result;
}
获取本地IP地址
通过hostname获取:hostname -I|awk -F ' ' '{print $1}'
获取系统名称
通过hostnamectl获取:hostnamectl |grep Operating|awk -F ':' '{print $2}'