感谢文洋兄的思路。亲测有效。
[root@storage GetCpuType]# ./main.o
Intel(R) Xeon(R) CPU C5528 @ 2.13GHz
#include <stdio.h>
#include <stdlib.h>char x86_model_id[64];
static inline void
cpuid(unsigned int op, unsigned int *a, unsigned int *b, unsigned int *c, unsigned int *d){ __asm__ __volatile__ (".byte 0x53\n\tcpuid\n\t" "movl %%ebx, %%esi\n\t.byte 0x5b" : "=a" (*a), "=S" (*b), "=c" (*c), "=d" (*d) : "a" (op));}static void get_model_name()
{ unsigned int *v; char *p, *q;v = (unsigned int *)x86_model_id;
cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]); cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]); cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]); x86_model_id[48] = 0;/*
* Intel chips right-justify this string for some dumb reason; * undo that brain damage: */ p = q = &x86_model_id[0]; while (*p == ' ') p++; if (p != q) { while (*p) *q++ = *p++; while (q <= &x86_model_id[48]) *q++ = '\0'; /* Zero-pad the rest */ }} int main(){ get_model_name();printf("%s \n", x86_model_id);
return 0;}