How to check CPU name, model, speed on Windows/Linux C?
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.
nullpointer
Updated on November 24, 2022Comments
-
nullpointer over 1 year
I would like to get some infos with C about hardware:
- how many CPU's I have
- how many cores have each of them
- how many logical cores have every core in every CPU
- CPU name + model
- CPU speed + frequency
- 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 callcat /proc/cpuinfo > file.txt
and then parsefile.txt
? I know aboutcpuid.h
(Im using GCC) but ca't find any doc about this header (anyway - is it a good idea to use it?)-
chrylis -cautiouslyoptimistic- over 10 yearsWhat do you mean "unsafe"?
-
Pierre about 7 yearsCall GetNativeSystemInfo if yours is a 32-bit app.