2010-08-31 68 views
5

我知道我可以使用終端和system-profiler命令來確定內核的當前位,但我試圖確定是否有方法在objective-c中以編程方式獲取相同的信息。如何確定Mac OS X 10.6中的內核位數?

我已經看過Carbon的格式塔,但沒有看到任何能夠告訴我內核位置的東西。

有沒有人有任何建議,我怎麼能做到這一點?我需要這些信息來獲得調查報告,該報告在報告時給出系統的快照。

謝謝!

更新:有一件事我已經試過這是一招,我從Windows世界瞭解到的情況是,檢查象int的大小:

sizeof(int*); //(4 = x86 8 = x64) 

,但我不認爲這是因爲我的決議認爲這隻會讓我知道實際的程序本身在運行什麼,而不是實際的操作系統內核。我的理解是,即使OS內核運行在32位,你的程序仍然可以運行在64位。

我已經跑過其他論壇張貼與此類似但沒有人似乎拿出一個答案,然後使用system_profiler。

回答

2

man 3 uname:它填補了utsname結構,包括成員machine,這是"x86_64""i386"在Intel平臺上:

struct utsname un; 
int res = uname(&un); 
if (res >= 0) { 
    NSLog(@"%s", un.machine); 
} 
+0

謝謝格奧爾格, 我試過你的例子,但無法得到它的工作。我確定它是PEBKAP,但我無法識別結構utsname。我的感覺是,這隻會給我一個CPU類型的概念,我正在尋找的是當前操作系統內核的實際位數,而不是CPU性能。 – 2010-09-01 12:49:08

+0

@user:使用'struct utsname un;' - 在這方面我仍然經常用C++來思考。這給你機器類型的內核是爲你正在尋找的。 – 2010-09-01 13:03:20

+0

Georg, 我得到它的工作,你是贏家,這給了我正在尋找的信息! 感謝您的幫助! – 2010-09-01 17:05:59

0

你應該能夠在命令行中讀取系統探查信息是這樣的:

sys_profile = popen("system_profiler -xml", "r"); 

見蘋果的文檔如何解析它在ProfileSystem例子。

軟件/系統軟件概述/ 64位內核和擴展可能是你想要的關鍵。

+0

Peter, 我開始認爲你是對的。我一直無法找到另一種方式來獲取'64位內核和擴展'所提供的信息。 – 2010-09-01 12:45:45

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; 
    } 
} 
+0

埃裏克, 我試着設置你所描述的is64的bool,但它總是返回false。如果我正確讀取代碼,這隻會告訴我,如果物理cpu是64位的能力。我真正想知道的是,目前運行的操作系統內核有多大。它運行x86(默認)還是運行x64? – 2010-09-01 12:44:13