自作アプリケーションから、ネットワーク関連のパラメータを参照したい場合があります。例えば「システム環境設定」の「ネットワーク」から設定する、IPアドレス、サブネットマスク、ルータ、DNSサーバなどです。また同様に、何らかのユニークなディフォルト名として、「共有」で設定された「コンピュータ名」や「Rendezvous名」を使いたい場合もあります。
OpenTransportやCFNetworkのAPIでパラメータを直接読み込む方法もありますが、それより、プロパティリスト(XML)として保存されている初期設定ファイルから読み込むのが近道です(とは言っても、そんなに簡単でもないのですが...)。このテクニックを一度身に付けておくと、色々な状況で応用が利きます。ネットワーク関連の初期設定は、/var/db/SystemConfiguration/に保存されている「preferences.xml」というXMLファイルに書き込まれています。
それでは、preferences.xmlファイルから起動マシンの「コンピュータ名」を読み込んでみます。preferences.xmlには数多くのパラメータが書き込まれていますので、そこからコンピュータ名が定義されている部分のみを抽出してみます。

以下のルーチンにより、上記のXMLからコンピュータ名として定義されている「PowerMac_G4」をパスカル文字列(Str255)として抽出します。XMLファイルまでのパス名をCFURLCreateWithFileSystemPath()に代入してCFURLRefを求めます。それからCFURLCreateDataAndPropertiesFromResource()で実際のデータを得て、XMLのディレクトリを順番につたっていき、目的のキー(ComputerName)までたどり着きます。

ファイルを参照するために用いているCFURLRefは、FSSpecやFSRefに続く第3のファイル参照方法です。CFURLRefの詳しい内容については、テクニカルノート2022番を参考にしてください。以下のURLには日本語訳も存在します。
http://developer.apple.com/ja/technotes/tn2022.html
続いて、preferences.xmlファイルから、起動マシンのIPアドレスを読み込んでみます。preferences.xmlからIPアドレスの定義部分だけを抽出すると、以下のようになります。

以下が、上記XMLからIPアドレス「192.168.1.16」をパスカル文字列(Str255)として抽出するルーチンです。先程のgetComputerName()と異なる所は、一番最後にCFDictionaryGetValue()ではなく、CFArrayGetValueAtIndex()を使いIPアドレスを得ている個所です。XMLの構造が、1台のマシンで複数のIPアドレスが持てるように考慮されているため、CFArrayRefによる参照を使います。

各種パラメータを読み込むのに利用したAPIは、すべてCore Foundationに属しています。Core Foundationのサービスは「Base Services」「Bundle Services」「Collection Services」「Plug-In Services」「Preference Services」「Property List Services 」「String Services 」「URL Services」「Utility Services」「XML Services 」に分類され、それぞれの詳しい内容については、Carbonドキュメントサイトで参照することができます。ただし、残念なことにPDFドキュメントは用意されていません(登場してから随分経過してるのに...)。
http://developer.apple.com/techpubs/macosx/Carbon/carbon.html
今回使用したAPIが定義されているUniversal Interfacesは、CFURL.h、CFURLAccess.h、CFPropertyList.h、CFDictionary.h、CFArray.h、CFString.hなどです。ファイル名の頭にCFが付いているものが、Core Foundationに関するヘッダファイルです。それにしても、定義されているAPI名がやたらと長いのには閉口してしまいます(笑)。
copyright 2002 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact us: koike@ottimo.co.jp