Hello, my Mac.


 Mac の機種名称を取り出すいくつかの方法です。ターミナルからコマンドを入力する場合と、carbon のコードに実装する場合の例です。

(1) ターミナルからsystem_profilerにて
【入力】
system_profiler SPHardwareDataType|grep "Machine"
【出力】
Machine Model: PowerBook G3 Series

(2) ターミナルからioregにて
【入力】
ioreg | grep "IOPlatformExpertDevice"
【出力】
+-o PowerBook1,1

(3) ターミナルからsysctlにて
【入力】
sysctl hw.model hw.machine
【出力】
hw.model: PowerBook1,1
hw.machine: Power Macintosh

ここで、"sysctl -A" を実行しても上記の項目は出力されません。

(4) Carbonのプログラムからsysctl関数にて 1)
【コード】
hw.model と hw.machine を取り出すことができます。次のコードは hw.model を取り出す場合です。HW_MODEL を HW_MACHINE に替えれば hw.machine が得られます。
#include <sys/types.h> #include <sys/sysctl.h> int mib[2]; size_t aLen; char *aString; mib[0] = CTL_HW; mib[1] = HW_MODEL; sysctl(mib, 2, NULL, &aLen, NULL, 0); aString = malloc(aLen); sysctl(mib, 2, aString, &aLen, NULL, 0);

【出力】
ポインタ aString に次の文字列が格納されました。
PowerBook1,1


参考文献
1) "BSD Library Functions Manual, SYSCTL(3)", http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/sysctl.3.html

プログラミングの環境

 筆者の環境は次に示す通りです。プログラムは同環境での動作を確認しています。
・PowerBook G3 333MHz, 384 MB
・Mac OS X 10.3.9
・Xcode 1.5


busaho
October 19, 2008