Как определить битность ядра в Mac OS X 10.6? - PullRequest
5 голосов
/ 31 августа 2010

Я знаю, что могу использовать терминал и команду system-profiler, чтобы определить текущую разрядность ядра, но я пытаюсь определить, есть ли способ получить эту же информацию программным способом в target-c.

Я просмотрел гештальт Карбона, но не увидел ничего, что говорило бы мне о ядре ядра.

У кого-нибудь есть предложения, как мне это сделать? Мне нужна эта информация для отчета об отладке, который дает снимок системы во время отчета.

Спасибо!

Обновление: одна вещь, которую я попробовал, - это уловка, которую я узнал из мира Windows, это проверка размера типа int, например:

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

но я не думаю, что это решение, потому что я думаю, что это только даст мне представление о том, на чем работает сама программа, а не ядро ​​ОС. Насколько я понимаю, даже если ядро ​​ОС работает на 32-битной, ваша программа может работать на 64-битной.

Я сталкивался с сообщениями на других форумах, похожих на этот, но ни один из них, похоже, не нашел ответа, кроме как с использованием system_profiler.

Ответы [ 3 ]

2 голосов
/ 31 августа 2010

См. man 3 uname: заполняет структуру utsname, которая включает элемент machine, который "x86_64" или "i386" на платформах Intel:

struct utsname un;
int res = uname(&un);
if (res >= 0) {
    NSLog(@"%s", un.machine);
}
1 голос
/ 31 августа 2010

Вы можете использовать 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 голосов
/ 31 августа 2010

Вы должны быть в состоянии прочитать информацию о профилировщике системы из командной строки следующим образом:

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

См. Пример ProfileSystem в документации Apple, чтобы узнать, как его анализировать.

Программное обеспечение / Обзор системного программного обеспечения / 64-битное ядро ​​и расширения - это, вероятно, ключ, который вам нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...