我想获得一些关于硬件的C信息:
我知道在类似Linux的操作系统上我可以解析/proc/cpuinfo
,但由于它不是普通文件,我认为它不安全。看到this回答SO但是它并没有给我提供我需要的每一个信息。我应该拨打cat /proc/cpuinfo > file.txt
然后解析file.txt
吗?我知道cpuid.h
(我正在使用GCC),但是找不到关于这个标题的任何文档(无论如何 - 使用它是个好主意吗?)
答案 0 :(得分:4)
对于Windows,您需要GetSystemInfo
功能; Microsoft has an example。在Linux上,/proc/cpuinfo
完全“安全”,无论这意味着什么,但已经an answer to this question。
答案 1 :(得分:3)
Linux procfs的假文件可能会出现问题。内核错误地将它们报告为常规文件,但它们的行为不像符合POSIX系统所需的常规文件。有关示例,请参阅http://www.openwall.com/lists/musl/2013/05/05/9。我怀疑你听过类似的报道,而这正是你关注的地方。
据说,据我所知,/proc
中假冒“常规文件”的所有不良行为仅与写作有关。对于阅读,它们的行为应该与实际常规文件非常相似,您可以随意阅读它们而不用担心它。
答案 2 :(得分:0)
如果您只关心与Intel兼容的CPU,则可以使用汇编程序指令
cpuid
作为嵌入式asm或作为单独的asm目标文件。
例如,要检查供应商,您可以使用功能0:
xor eax, eax ; load eax with function 0
cpuid ; call cpuid
现在,供应商ID位于寄存器ebx, ecx, edx
中。存在类似的功能来读取所有其他信息。
有关更多信息,请阅读this