How to determine kernel bitness in Mac OS X 10.6?
I know that I can use the terminal and the system-profiler command to determine the current bitness of the kernel but I am trying to determine if there is a way to get that same information programmatically in objective-c.
I 开发者_JAVA技巧have looked through Carbon's gestalt, but haven't seen anything that would tell me bitness of the kernel.
Does anyone have any suggestions as to how I could do this? I need this info for a debugging report that gives a snapshot of the system at the time of the report.
Thanks!
Update: One thing I have tried that is a trick I learned from the Windows world is to check the size of an int like:
sizeof(int*); //(4 = x86 8 = x64)
but I don't think this is a resolution because I think this will only give me an idea of what the actual program itself is running at and not the actual OS kernel. My understanding is that even though the OS kernel is running at 32 bit your program can still run at 64bit.
I have run across other forum posting similar to this one but none of them seem to come up with an answer other then using system_profiler.
See man 3 uname
: It fills a utsname
structure which includes a member machine
, which is "x86_64"
or "i386"
on Intel platforms:
struct utsname un;
int res = uname(&un);
if (res >= 0) {
NSLog(@"%s", un.machine);
}
You could use sysctlbyname. Dig around mach/machine.h
to get possible values.
#include <mach/machine.h>
#include <sys/sysctl.h>
void example()
{
unsigned int cpuType;
size_t size = sizeof(cpuType);
sysctlbyname("hw.cputype", &cpuType, &size, NULL, 0);
bool is64 = cpuType & CPU_ARCH_ABI64;
const char *cpu;
switch (cpuType) {
case CPU_TYPE_X86:
cpu = "x86";
break;
case CPU_TYPE_X86_64:
cpu = "x86_64";
break;
case CPU_TYPE_POWERPC:
cpu = "ppc";
break;
case CPU_TYPE_POWERPC64:
cpu = "ppc_64";
break;
case CPU_TYPE_SPARC:
cpu = "sparc";
break;
default:
cpu = "unknown";
break;
}
}
You should be able to read the system profiler information in from command line like this:
sys_profile = popen("system_profiler -xml", "r");
See the ProfileSystem example in Apple's documentation for how to parse it.
Software/System Software Overview/64-bit Kernel and Extensions is probably the key you want.
精彩评论