gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:07 35 4
gpt4 key购买 nike

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

目前我正在使用这个

#include <stdio.h>
#include <cpuid.h>

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

我只在 Intel Core i 处理器上测试过,所以它可能只适用于这种类型的 CPU。

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

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

最佳答案

可以使用popen然后解析结果

unsigned char *pk = new unsigned char[100];
FILE *source = popen("lscpu", "r");
while (!feof(source)) {
fread(pk, 100, 1, source);
for(int i=0;i<100;++i)
{
printf("%c",pk[i]);
}
printf("\n");
}
pclose(source);

关于c++ - C/C++ 如何在 linux 上获取处理器序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41673220/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com