我知道我可以使用终端和system-profiler命令来确定内核的当前位数,但我正在尝试确定是否有一种方法可以在objective-c中以编程方式获得相同的信息。
我看过Carbon的格式塔,但没有看到任何可以告诉我内核的位性的东西。
有没有人对我如何做到这一点有什么建议?我需要这个信息的调试报告,给出了系统的快照在报告的时间。
谢谢!
更新:我尝试过的一件事是我从Windows世界学到的一个技巧,那就是检查int的大小,比如:
sizeof(int*); //(4 = x86 8 = x64)但我不认为这是一个解决方案,因为我认为这只会让我了解实际的程序本身是在什么上运行的,而不是实际的操作系统内核。我的理解是,即使操作系统内核运行在32位,你的程序仍然可以运行在64位。
我遇到过其他类似的论坛帖子,但除了使用system_profiler之外,似乎没有一个人能给出答案。
发布于 2010-08-31 23:52:14
请参阅man 3 uname:它填充包含成员machine的utsname结构,在英特尔平台上为"x86_64"或"i386":
struct utsname un;
int res = uname(&un);
if (res >= 0) {
NSLog(@"%s", un.machine);
}发布于 2010-09-01 00:07:56
您可以使用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;
}
}发布于 2010-08-31 23:32:23
您应该能够从命令行中读取系统分析器信息,如下所示:
sys_profile = popen("system_profiler -xml", "r");请参阅苹果文档中的ProfileSystem示例,了解如何解析它。
软件/系统软件概述/64位内核和扩展可能是您想要的密钥。
https://stackoverflow.com/questions/3610424
复制相似问题