直接代码,有的电脑cpuid可能没有,代码头文件没有理清但是满足编译需求
std::string getcpuid() 来获取cpu id信息
std::string get_harddisk_info()来获取硬盘id
#include <unistd.h>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <arpa/inet.h>
#include <string>
#include <fstream>
#include <ifaddrs.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
//#include <linux/if.h>
#include <stdio.h>
#include <linux/hdreg.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <net/if.h>
#include <sys/types.h>
#include <stdlib.h>
//
std::string getcpuid()
{std::string strCPUId;unsigned long s1,s2;char buf[32] = {0};asm volatile("movl $0x01, %%eax;""xorl %%edx, %%edx;""cpuid;""movl %%edx, %0;""movl %%eax, %1;":"=m"(s1), "=m"(s2));std::cout << "" << std::endl;if (s1) {memset(buf, 0, 32);snprintf(buf, 32, "%08X", s1);strCPUId += buf;}//std::cout << "cpuid 2" << std::endl;if (s2) {memset(buf, 0, 32);snprintf(buf, 32, "%08X", s2);strCPUId += buf;}std::cout << "" << std::endl;/*asm volatile("movl $0x03, %%eax;""xorl %%ecx, %%ecx;""xorl %%edx, %%edx;""cpuid;""movl %%edx, %0;""movl %%ecx, %1;":"=m"(s1), "=m"(s2));std::cout << "cpuid 4" << std::endl;if (s1) {memset(buf, 0, 32);snprintf(buf, 32, "%08X", s1);strCPUId += buf;}std::cout << "cpuid 5" << std::endl;if (s2) {memset(buf, 0, 32);snprintf(buf, 32, "%08X", s2);strCPUId += buf;}*/return strCPUId;
}static void parse_board_serial(const char * file_name, const char * match_words, std::string & board_serial)
{board_serial.c_str();std::ifstream ifs(file_name, std::ios::binary);if (!ifs.is_open()){return;}char line[4096] = { 0 };while (!ifs.eof()){ifs.getline(line, sizeof(line));if (!ifs.good()){break;}const char * board = strstr(line, match_words);if (NULL == board){continue;}board += strlen(match_words);while ('\0' != board[0]){if (' ' != board[0]){board_serial.push_back(board[0]);}++board;}if ("None" == board_serial){board_serial.clear();continue;}if (!board_serial.empty()){break;}}ifs.close();
}static bool get_board_serial_by_system(std::string & board_serial)
{board_serial.c_str();const char * dmidecode_result = ".dmidecode_result.txt";char command[512] = { 0 };snprintf(command, sizeof(command), "sudo dmidecode -t 2 | grep Serial > %s", dmidecode_result);if (0 == system(command)){parse_board_serial(dmidecode_result, "Serial Number:", board_serial);}unlink(dmidecode_result);return(!board_serial.empty());
}static bool get_board_serial_number(std::string & board_serial)
{//if (0 == getuid()){if (get_board_serial_by_system(board_serial)){return(true);}}return(false);
}std::string get_harddisk_info()
{std::string board_serial;if (get_board_serial_number(board_serial)){//printf("board_serial: [%s]\n", board_serial.c_str());return board_serial;}else{//printf("can not get board id\n");}return "";
}