C++コードのIOPlatformExpertDevice
へのハンドルがio_service_t
の場合は、IORegistryEntryCreateCFProperty()
関数を使用して「board-id」プロパティを取得できます。 CFData
オブジェクトを受け取ることを期待しますが、ヌルと正しいタイプIDを確認してください。次に、通常のCFData
メソッドを使用して、必要な形式でデータを抽出します。
あなたはIOServiceのはまだ扱う持っていない場合は、あなたがIOServiceGetMatchingService()
のいずれかを使用してそこに得ることができる必要があります(私は。それが唯一のIOPlatformExpertDevice
インスタンスがあるだろうと仮定しても安全です望んでいる)、または取得するためにIORegistryGetRootEntry()
を使用してIORegistryグラフをIORegistryEntryGetChildEntry()
またはそれに類似するプラットフォームエキスパートデバイスに移動してください。
board-id
プロパティは、名前のシンボリック定数を持っていないとして、あなたはそれをハードコーディングする必要があります:プロパティ値がCFNumber
を含む様々なタイプを、取ることができること
CFTypeRef board_id_property = IORegistryEntryCreateCFProperty(
platform_expert_device, CFSTR("board-id"), kCFAllocatorDefault, 0);
注意、CFBoolean
、CFString
、CFData
をCFArray
およびCFDictionary
があり、型が期待どおりでない場合、またはNULLが返された場合(プロパティが存在しない場合)は対処する準備が必要です。少なくともリゾートのよう
if (board_id_property != NULL && CFGetTypeID(board_id_property) == CFDataGetTypeID())
{
CFDataRef board_id_data = (CFDataRef)board_id_property;
// safe to use CFData* functions now
...
CFRelease(board_id_property);
}
else
{
// Unexpected, do error handling.
...
if (board_id_property != NULL)
CFRelease(board_id_property);
}
:例えば、
CFGetTypeID()
を使用してタイプをチェックし、あなたは 'パイプ()'とあなたの質問からのコマンドラインを使用することができます。 –'popen()'確かに? –
@MarkSetchell申し訳ありませんがミスタイプです。 –