我知道我可以使用终端和system-profiler命令来确定内核的当前位数,但我正在尝试确定是否有办法在objective-c中以编程方式获取相同的信息。
我已经查看了Carbon的格式塔,但没有看到任何可以告诉我核心内容的东西。
有没有人对我如何做到这一点有任何建议?我需要这个信息用于调试报告,该报告在报告时提供系统的快照。
谢谢!
更新:我尝试过的一件事是我从Windows世界中学到的一个技巧是检查int的大小:
sizeof(int*); //(4 = x86 8 = x64)
但我不认为这是一个解决方案,因为我认为这只会让我了解实际程序本身运行的是什么,而不是实际的操作系统内核。我的理解是,即使操作系统内核以32位运行,您的程序仍然可以在64位运行。
我遇到了与此类似的其他论坛帖子,但似乎没有人在使用system_profiler之后得到答案。
答案 0 :(得分:2)
请参阅man 3 uname
:它填充了一个utsname
结构,其中包含成员machine
,即"x86_64"
或"i386"
在英特尔平台上:
struct utsname un;
int res = uname(&un);
if (res >= 0) {
NSLog(@"%s", un.machine);
}
答案 1 :(得分:1)
您可以使用sysctlbyname。挖掘mach/machine.h
以获得可能的值。
#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;
}
}
答案 2 :(得分:0)
您应该能够从命令行中读取系统探查器信息,如下所示:
sys_profile = popen("system_profiler -xml", "r");
请参阅Apple文档中的ProfileSystem示例,了解如何解析它。
软件/系统软件概述/ 64位内核和扩展可能是您想要的关键。