当前位置: 首页 > 面试题库 >

在Linux中使用C / C ++获取机器序列号和CPU ID

郝乐心
2023-03-14
问题内容

如何在Linux系统中获取机器序列号和CPU ID?

示例代码受到高度赞赏。


问题答案:

这是Linux内核似乎使用的内容:

static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
                                unsigned int *ecx, unsigned int *edx)
{
        /* ecx is often an input as well as an output. */
        asm volatile("cpuid"
            : "=a" (*eax),
              "=b" (*ebx),
              "=c" (*ecx),
              "=d" (*edx)
            : "0" (*eax), "2" (*ecx));
}

然后可以将其用作例如:

#include <stdio.h>

int main(int argc, char **argv)
{
  unsigned eax, ebx, ecx, edx;

  eax = 1; /* processor info and feature bits */
  native_cpuid(&eax, &ebx, &ecx, &edx);

  printf("stepping %d\n", eax & 0xF);
  printf("model %d\n", (eax >> 4) & 0xF);
  printf("family %d\n", (eax >> 8) & 0xF);
  printf("processor type %d\n", (eax >> 12) & 0x3);
  printf("extended model %d\n", (eax >> 16) & 0xF);
  printf("extended family %d\n", (eax >> 20) & 0xFF);

  /* EDIT */
  eax = 3; /* processor serial number */
  native_cpuid(&eax, &ebx, &ecx, &edx);

  /** see the CPUID Wikipedia article on which models return the serial 
      number in which registers. The example here is for 
      Pentium III */
  printf("serial number 0x%08x%08x\n", edx, ecx);

}

这篇Wikipedia文章中有关如何使用该CPUID指令的很好参考。

编辑 Wikipedia文章说,序列号是随Pentium
III一起引入的,但是由于隐私问题,以后的型号中不再使用该序列号。在Linux系统上,您可以通过执行以下操作检查此功能(PSN位)是否存在:

grep -i --color psn /proc/cpuinfo

如果未显示任何内容,则您的系统不支持处理器序列号。



 类似资料:
  • 本文向大家介绍使用Objective-C获取IPHONE手机IMSI序列号,包括了使用Objective-C获取IPHONE手机IMSI序列号的使用技巧和注意事项,需要的朋友参考一下 获取IPhone 的IMSI序列号 通过IMSI获取运营商 获取手机号 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 问题内容: 有什么方法可以确定使用C ++的linux中USB驱动器的s / n吗? 如果不是的话,C ++是否与and 有任何其他区别? 问题答案: 我将尝试总结有关在Linux上进行存储驱动器序列号检索的经验。 我假设您要 存储设备 标识的序列号(按照SCSI规范)而不是 USB设备 的序列号(按照Device Descriptor 下的USB规范),这两个是不同的实体。 注意! 大多数设备倾

  • 标准< code>rand()函数给出的数字对我来说不够大:我需要< code>unsigned long long的数字。我们如何得到非常大的随机数?我试着修改一个简单的散列函数,但是它太大,运行时间太长,而且从来不会产生小于1e5的数字!!

  • 问题内容: 如何在程序中不使用环境(getenv,…)的情况下获取实际的“用户名”? 问题答案: 中 定义的函数返回用户名。请参阅以获取更多信息。 它的签名是: 不用说,可以在C或C ++中轻松调用此函数。

  • 我在这里找到了问题的基本答案:在MSMQ、C#中枚举所有传出队列,然而,当我试图运行答案中发布的代码时,在抛出异常“无效查询”之前需要几秒钟到几分钟。 堆栈跟踪:在System.Management.ManagementException.throwwithExtendedInfo(ManagementStatus errorCode)在System.Management.ManagementOb

  • 问题内容: 我想使用系统蜂鸣器(并且只有在没有蜂鸣器/无法访问蜂鸣器时才使用扬声器)生成具有特定频率和长度(针对不同的声音信号)的蜂鸣声。我知道可以通过使用ioctl来做到这一点,但这需要root访问权限,而这是我所不希望的。 我知道我可以只使用“ beep”命令,但这将是一个依赖关系,如果可能的话,不应使用它(根本没有外部依赖关系,只有基本的linux库和C)。 我目前拥有的是以下代码(但这需要