linux c cpu 序列号,C/C++如何在linux上获取处理器序列号

我想知道如何在GNU Linux上可靠地获取处理器序列号(PSN)。C/C++如何在linux上获取处理器序列号

现在我使用这个

#include

#include

unsigned int level = 1;

unsigned eax = 3 /* processor serial number */, ebx = 0, ecx = 0, edx = 0;

__get_cpuid(level, &eax, &ebx, &ecx, &edx);

// byte swap

int first = ((eax >> 24) & 0xff) | ((eax << 8) & 0xff0000) | ((eax >> 8) & 0xff00) | ((eax << 24) & 0xff000000);

int last = ((edx >> 24) & 0xff) | ((edx << 8) & 0xff0000) | ((edx >> 8) & 0xff00) | ((edx << 24) & 0xff000000);

printf("PSN: %08X%08X", first, last);

它给我PSN: A7060200FFFBEBBF,

sudo dmidecode | grep -P '^\s+ID: ([0-9A-F]{2}){7}[0-9A-F]{2}$'

输出相匹配:ID: A7 06 02 00 FF FB EB BF

我只在英特尔酷睿测试我处理器,所以也许它只适用于这种类型的CPU。

我知道“序列号”在相同的CPU型号上是相同的,因此不是唯一的。

此外,我期待着实现这一目标的方法,即不依赖执行shell命令和解析输出。

2017-01-16

Annihil

+0

希望[这](http://stackoverflow.com/questions/6491566/getting-the-machine-serial-number-and-cpu- id-using-cc-in-linux)有帮助。 –

+0

谢谢,我的代码片段已经从这个答案中得到了启发,但不幸的是它适用于Intel Pentum III。他还使用asm只用于x86的易失性代码,这是我所避免的。他也没有使用相同的值,使用的水平是0,这对我没有用,他使用了不同的寄存器,ecx edx,而我的eax edx。 –

+0

它将适用于AMD,但不适用于所有ARM处理器 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值