I'm making a OS X app where I need to get the Mac model, for example:
iMac11,3
MacBook3开发者_如何转开发,1
And so on. Is there any class, or function to get it?
This information is available via. sysctl
:
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/sysctl.h>
size_t len = 0;
sysctlbyname("hw.model", NULL, &len, NULL, 0);
if (len) {
char *model = malloc(len*sizeof(char));
sysctlbyname("hw.model", model, &len, NULL, 0);
printf("%s\n", model);
free(model);
}
The API for that would be in the IOKit. Looking in the IORegistryExplorer app on my laptop, I see that the first node from the root of the IOService tree is an IOPlatformExpertDevice, with a entry under the key "model" equal to "MacBookPro6,1"
I'm not sure if there is an exact way of getting it through Cocoa, but you can use NSTask and get this through shell.
sysctl hw.model
While not using a direct Cocoa API, you could use NSTask to execute the "system_profiler" command line tool. If you execute the tool as: "system_profiler SPHardwareDataType" it will give you a smaller output which could be filtered to extract the model identifier.
Update
I found an example using sysctl programmatically:
int mib[2];
size_t len = 0;
char *rstring = NULL;
mib[0] = CTL_HW;
mib[1] = HW_MODEL;
sysctl( mib, 2, NULL, &len, NULL, 0 );
rstring = malloc( len );
sysctl( mib, 2, rstring, &len, NULL, 0 );
NSLog(@"%s", rstring );
free( rstring );
rstring = NULL;
Sourced from here.
精彩评论