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

14,702

Solution 1

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.

Solution 2

For Windows, you'll want the GetSystemInfo function; Microsoft has an example. On Linux, /proc/cpuinfo is perfectly "safe", whatever that means, but there's already an answer to this question.

Share:
14,702
nullpointer
Author by

nullpointer

Updated on November 24, 2022

Comments

  • nullpointer
    nullpointer over 1 year

    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?)

    • chrylis -cautiouslyoptimistic-
      chrylis -cautiouslyoptimistic- over 10 years
      What do you mean "unsafe"?
  • Pierre
    Pierre about 7 years
    Call GetNativeSystemInfo if yours is a 32-bit app.