2010-08-31 24 views
5

wiem, że mogę korzystać z terminala i komendę System-Profiler w celu określenia obecnego bitness jądra, ale staram się ustalić, czy istnieje sposób, aby uzyskać tę samą informację programowo w Objective-C.Jak określić bernela jądra w systemie Mac OS X 10.6?

ja przejrzałem gestaltu Carbon, ale nie wszystko, co powie mi bitness jądra widać.

Czy ktoś ma jakieś sugestie co do tego w jaki sposób mogę to zrobić? Potrzebuję tych informacji do raportu debugowania, który daje migawkę systemu w czasie raportu.

Dzięki!

Aktualizacja: Jedno Próbowałem to jest sztuczka dowiedziałem ze świata Windows jest, aby sprawdzić rozmiar int jak:

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

ale nie sądzę, że jest to rozdzielczość bo myślę, że to tylko da mi pojęcie o tym, jaki działa sam program, a nie o rzeczywistym jądrze systemu operacyjnego. Rozumiem, że nawet jeśli jądro systemu operacyjnego działa na poziomie 32-bitowym, twój program nadal może działać na 64-bitach.

mam natknąć innym forum delegowania podobne do tego, ale żaden z nich nie wydają się pochodzić z odpowiedzią inne następnie używając system_profiler.

Odpowiedz

2

Zobacz man 3 uname: Wypełnia strukturę utsname który zawiera element machine, który jest "x86_64" lub "i386" na platformach Intel:

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

Dzięki Georg, Próbowałem twojego przykładu, ale nie mogłem go uruchomić. Jestem pewien, że jest to PEBKAP z mojej strony, ale nie mogę go rozpoznać struktury nazwy utsname. Mam wrażenie, że to tylko dałoby mi pojęcie typu procesora, gdzie to, czego szukam, jest rzeczywistą wersją bieżącego jądra systemu operacyjnego, a nie wydajnością procesora. –

+0

@user: Użyj 'struct utsname un;' - nadal często myślę w C++ pod tym względem. I to daje ci typ maszyny, z której zbudowano jądro, którego szukasz. –

+0

Georg, mam to pracę i jesteś zwycięzcą ten daje mi informacje szukam! Dzięki za pomoc! –

0

powinien mieć możliwość zapoznania się z informacjami Profil systemu z linii poleceń tak:

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

Patrz przykład ProfileSystem w dokumentacji firmy Apple na jak go analizować.

Software/Oprogramowanie systemowe Przegląd/64-bitowe jądro i rozszerzenia jest chyba klucz chcesz.

+0

Peter, Zaczynam myśleć, że masz rację. Nie byłem w stanie znaleźć innego sposobu na uzyskanie informacji dostarczanych przez '64-bitowe jądro i rozszerzenia'. –

1

można użyć sysctlbyname. Wykop około mach/machine.h, aby uzyskać możliwe wartości.

#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

Eric, Próbowałem ustawić bool is64, jak opisujesz, ale zawsze zwraca false. Jeśli poprawnie odczytuję kod, powie mi tylko, czy fizyczny procesor ma zdolność 64-bitową.To, co chciałbym wiedzieć, to to, czym bitness jest obecnie jądro systemu operacyjnego. Czy to działa x86 (domyślnie) czy działa x64? –

Powiązane problemy