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

C++ C/C++;如何在linux上获取处理器序列号,c++,c,linux,processor,cpuid,C++,C,Linux,Processor,Cpuid,我想知道如何在GNULinux上可靠地获取处理器序列号(PSN) 现在我用这个 #包括 #包括 无符号整数级=1; 无符号eax=3/*处理器序列号*/,ebx=0,ecx=0,edx=0; __获取cpuid(级别、eax、ebx、ecx和edx); //字节交换 int first=((eax>>24)&0xff)|((eax>8)&0xff00)|((eax>24)&0xff)|((edx>8)&0xff00)|((edx您可以使用popen,然后解析结果 unsigned char *p

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

现在我用这个

#包括
#包括
无符号整数级=1;
无符号eax=3/*处理器序列号*/,ebx=0,ecx=0,edx=0;
__获取cpuid(级别、eax、ebx、ecx和edx);
//字节交换

int first=((eax>>24)&0xff)|((eax>8)&0xff00)|((eax>24)&0xff)|((edx>8)&0xff00)|((edx您可以使用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);
unsigned char*pk=新的unsigned char[100];
文件*source=popen(“lscpu”,“r”);
而(!feof(源)){
fread(pk,100,1,来源);

对于(inti=0;i您可以使用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);
unsigned char*pk=新的unsigned char[100];
文件*source=popen(“lscpu”,“r”);
而(!feof(源)){
fread(pk,100,1,来源);

对于(int i=0;iHope有帮助。谢谢,我的代码片段已经从这个答案中得到启发,但不幸的是它是针对Intel Pentum III的。他也使用了仅适用于x86的asm易失性代码,这是我避免的。他也没有使用相同的值,使用的级别是0,这对我不起作用,他使用的是不同的寄存器ecx edx,而我使用的是eax edx。它适用于AMD,但不适用于所有ARM处理器OK。但为什么英特尔奔腾III的示例使用不同级别来获得PSN?您好@Bap,您有机会在其他x86/64处理器上测试您的代码吗?(可能是Xeon?)。它有效吗?希望有帮助。谢谢,我的代码片段已经从这个答案中得到启发,但不幸的是,它是针对Intel Pentum III的。他还使用了仅适用于x86的asm易失性代码,这是我避免的。他也没有使用相同的值,使用的级别是0,这对我不起作用,他使用了不同的寄存器ecx edx,而me eax edx。它适用于AMD,但不适用于所有ARM处理器OK。但为什么英特尔奔腾III的示例使用不同的级别来获得PSN?Hello@Bap,您有机会在其他x86/64处理器上测试您的代码吗?(可能是Xeon?)。它有效吗?谢谢,但我正在寻找一种不依赖于执行shell命令和检索输出的解决方案。谢谢,但我正在寻找一种不依赖于执行shell命令和检索输出的解决方案。