1

我想用 C 获得一些关于硬件的信息:

  1. 我有多少个 CPU
  2. 每个有多少个核心
  3. 每个 CPU 中每个核心有多少个逻辑核心
  4. CPU名称+型号
  5. CPU速度+频率
  6. CPU 架构(x86、x64)

我知道在类似 Linux 的操作系统上我可以解析/proc/cpuinfo,但由于它不是普通文件,我认为它不安全。在 SO 上看到了这个答案,但它并没有给我我需要的所有信息。我应该打电话cat /proc/cpuinfo > file.txt然后解析file.txt吗?我知道cpuid.h(我正在使用 GCC),但找不到任何关于此标头的文档(无论如何 - 使用它是个好主意吗?)

4

3 回答 3

4

对于 Windows,您需要该GetSystemInfo功能;微软有一个例子。在 Linux/proc/cpuinfo上,无论这意味着什么,它都是完全“安全的”,但这个问题已经有了答案

于 2013-09-03T12:54:48.757 回答
3

Linux procfs 的假文件可能会出现问题。内核错误地将它们报告为常规文件,但它们的行为不像符合 POSIX 系统上的常规文件所必需的那样。例如,请参阅http://www.openwall.com/lists/musl/2013/05/05/9。我怀疑你听说过类似的报道,这就是你担心的地方。

话虽如此,据我所知,假“常规文件”的所有不良行为/proc仅与写作有关。对于阅读,它们的行为应该与实际的常规文件非常相似,您可以随心所欲地阅读它们而不必担心。

于 2013-09-03T13:09:37.467 回答
0

如果您只关心与英特尔兼容的 CPU,您可以使用汇编指令

cpuid

作为内联 asm 或作为单独的 asm 目标文件。

例如,要检查供应商,您将使用函数 0:

xor eax, eax  ; load eax with function 0
cpuid         ; call cpuid

现在供应商 ID 位于寄存器中ebx, ecx, edx。存在类似的功能来读取所有其他信息。

有关更多信息,请阅读

于 2018-07-18T09:55:45.720 回答