Search code examples
clinuxcpucpu-architecturecpu-speed

How to check CPU name, model, speed on Windows/Linux C?


I would like to get some infos with C about hardware:

  1. how many CPU's I have
  2. how many cores have each of them
  3. how many logical cores have every core in every CPU
  4. CPU name + model
  5. CPU speed + frequency
  6. CPU architecture (x86, x64)

I know that on Linux-like OS I can parse /proc/cpuinfo but since its not an ordinary file, I think its unsafe. Saw this answer on SO but it doesnt give me EVERY info I need. Should I call cat /proc/cpuinfo > file.txt and then parse file.txt? I know about cpuid.h (Im using GCC) but ca't find any doc about this header (anyway - is it a good idea to use it?)


Solution

  • Linux procfs's fake files can behave very problematically. The kernel falsely reports them as regular files, but they don't behave as regular files are required to on a conforming POSIX system. For an example, see http://www.openwall.com/lists/musl/2013/05/05/9. I suspect you've heard similar reports and this is where your concern is coming from.

    With that said, as far as I know, all of the bad behavior of the fake "regular files" in /proc pertains only to writing. For reading they should behave sufficiently similar to actual regular files that you can just read them however you like and not worry about it.