嵌入式linux开发,C/C++获取cpu的id和名字。
一、说明1、X86 linux获取cpu与ARM linux获取cpu ID不同
2、获取cpu name,两者相同
二、命令获取 1、X86 linux获取cpudmidecode -t 4 | grep ID2、ARM linux获取cpu ID
cat /proc/cpuinfo | grep Serial3、获取cpu name
cat /proc/cpuinfo | grep Serial三、相关C/C++代码如下
#include#include #include #include #include //isspace //memcpy // C语言:#include // C++:#include #include //X86 linux获取cpu ID static inline char* skip_ws(const char *p) { while (isspace(*p)) p++; return (char *)p; } static inline char* skip_token(const char *p) { while (isspace(*p)) p++; while (*p && !isspace(*p)) p++; return (char *)p; } int GetCpuIdByAsm_x86(char* cpu_id) { char cpuId[40]={0}; size_t length = 0; FILE * fp = popen("dmidecode -t 4 | grep ID", "r"); if (fp) { char* ci = fgets(cpuId, sizeof(cpuId) - 1, fp); if (ci) { char* pstr = skip_ws(skip_token(cpuId)); char* pchar = pstr; while(*pchar) { if(*pchar == ' ' ) { // is space *pchar++ = '-'; } else { ++pchar; } } memcpy(cpu_id, pstr, strlen(cpuId)); } else { fclose(fp); return -1; } pclose(fp); } return 0; } //ARM linux获取cpu ID int GetCpuIdByAsm_arm(char* cpu_id) { FILE *fp = fopen("/proc/cpuinfo", "r"); if(NULL == fp) { printf("failed to open cpuinfon"); return -1; } char cpuSerial[100] = {0}; while(!feof(fp)) { memset(cpuSerial, 0, sizeof(cpuSerial)); fgets(cpuSerial, sizeof(cpuSerial) - 1, fp); // leave out n char* pch = strstr(cpuSerial,"Serial"); if (pch) { char* pch2 = strchr(cpuSerial, ':'); if (pch2) { memmove(cpu_id, pch2 + 2, strlen(cpuSerial)); break; } else { fclose(fp); return -1; } } } fclose(fp); return 0; } //X86、ARM获取cpu name int GetCpuInfo(char* cpuName) { FILE *fp = fopen("/proc/cpuinfo", "r"); if(NULL == fp) { printf("failed to open cpuinfon"); return -1; } char cpuModel[100] = {0}; while(!feof(fp)) { memset(cpuModel, 0, sizeof(cpuModel)); fgets(cpuModel, sizeof(cpuModel) - 1, fp); // leave out n char* pch = strstr(cpuModel,"model name"); if (pch) { char* pch2 = strchr(cpuModel, ':'); if (pch2) { memmove(cpuName, pch2 + 2, strlen(cpuModel)); break; } else { fclose(fp); return -1; } } } fclose(fp); return 0; } int main(int argc, char **argv) { int result; //获得文件状态信息 if (argc > 1) { printf("%sn", argv[1]); } else { printf("%sn", argv[0]); } char cpu_id_x86[40] = {0}; result = GetCpuIdByAsm_x86(cpu_id_x86); //EC-06-08-00-FF-FB-8B-1F if (result < 0) { printf("GetCpuIdByAsm_x86 failedn"); } else { int len = strlen(cpu_id_x86); if (iscntrl(cpu_id_x86[len-1])) { len--; cpu_id_x86[len] = 0; } printf("cpu id x86(%d) = %sn", len, cpu_id_x86); } char cpu_id_arm[40] = {0}; result = GetCpuIdByAsm_arm(cpu_id_arm); //EC-06-08-00-FF-FB-8B-1F if (result < 0) { printf("GetCpuIdByAsm_arm failedn"); } else { int len = strlen(cpu_id_arm); if (iscntrl(cpu_id_arm[len-1])) { len--; cpu_id_arm[len] = 0; } printf("cpu id arm(%d) = %sn", len, cpu_id_arm); int i=0; for (; i



