Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically get processor details from Mac OS X

My application running on Mac OS X that needs to retrieve details about the machine it is running on to report for system information. One of the items I need is details about the processor(s) installed in the computer.

My code currently works, but is far from an ideal solution, in fact I consider it a bad solution, but I have had no luck in finding a better one.

The information I report currently and after some formatting looks like:

Processor: Intel Core 2 Duo 2.1 GHz, Family 6 Model 23 Stepping 6

All of the info I get is through command-line utilities called from a popen(). The readable part of the processor description is taken from the "system_profiler" command output and the Family, Model, and Stepping values are taken from the "sysctl" command.

These command-line utilities must be getting there information from somewhere. I'm wondering if there is an programmatic interface available to get this same info?


Related:

  • How can display driver version be obtained on the Mac?
like image 309
brader24 Avatar asked May 12 '09 17:05

brader24


1 Answers

Use sysctlbyname rather than sysctl, e.g.

#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/sysctl.h>

uint64_t get_cpu_freq(void)
{
    uint64_t freq = 0;
    size_t size = sizeof(freq);

    if (sysctlbyname("hw.cpufrequency", &freq, &size, NULL, 0) < 0)
    {
        perror("sysctl");
    }
    return freq;
}

You can get a list of the names that can be passed to systctlbyname by looking at the output of sysctl -a from the command line.

like image 176
Paul R Avatar answered Sep 29 '22 11:09

Paul R