如何以编程方式检索 OS X board-id 信息
How to retrieve OS X board-id information programmatically
如何在 C++ 中以编程方式检索以下信息:
这是Mac中的一个终端命令 OSX:
ioreg -c IOPlatformExpertDevice | awk '/board-id/ {print }' | awk -F '\"' '{print }'
我使用 IOKit 库来检索信息,例如 IOPlatformSerialNumber 和 PlatformUUID 信息。但是我找不到 "board-id".
的任何对应键
如果您的 C++ 代码中有 IOPlatformExpertDevice
的 io_service_t
句柄,您可以使用 IORegistryEntryCreateCFProperty()
函数获取 "board-id" 属性 .期望收到一个 CFData
对象,但要检查 null 和正确的类型 ID 以确保。然后,使用通常的 CFData
方法以您想要的形式提取数据。
如果您还没有 IOService 句柄,您应该可以使用 IOServiceGetMatchingService()
之一(我希望假设只有一个 IOPlatformExpertDevice
实例是安全的.),或使用 IORegistryGetRootEntry()
获取根,并使用 IORegistryEntryGetChildEntry()
或类似的方法将 IORegistry 图遍历到平台专家设备。
由于 board-id
属性 没有命名的符号常量,您只需对其进行硬编码:
CFTypeRef board_id_property = IORegistryEntryCreateCFProperty(
platform_expert_device, CFSTR("board-id"), kCFAllocatorDefault, 0);
请注意,属性 值可以采用不同的类型,包括 CFNumber
、CFBoolean
、CFString
、CFData
、CFArray
和CFDictionary
,你需要准备好处理类型与你期望的不匹配的情况,或者当返回 NULL 时(如果 属性 不存在)。使用 CFGetTypeID()
检查类型,例如:
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);
}
如何在 C++ 中以编程方式检索以下信息:
这是Mac中的一个终端命令 OSX:
ioreg -c IOPlatformExpertDevice | awk '/board-id/ {print }' | awk -F '\"' '{print }'
我使用 IOKit 库来检索信息,例如 IOPlatformSerialNumber 和 PlatformUUID 信息。但是我找不到 "board-id".
的任何对应键如果您的 C++ 代码中有 IOPlatformExpertDevice
的 io_service_t
句柄,您可以使用 IORegistryEntryCreateCFProperty()
函数获取 "board-id" 属性 .期望收到一个 CFData
对象,但要检查 null 和正确的类型 ID 以确保。然后,使用通常的 CFData
方法以您想要的形式提取数据。
如果您还没有 IOService 句柄,您应该可以使用 IOServiceGetMatchingService()
之一(我希望假设只有一个 IOPlatformExpertDevice
实例是安全的.),或使用 IORegistryGetRootEntry()
获取根,并使用 IORegistryEntryGetChildEntry()
或类似的方法将 IORegistry 图遍历到平台专家设备。
由于 board-id
属性 没有命名的符号常量,您只需对其进行硬编码:
CFTypeRef board_id_property = IORegistryEntryCreateCFProperty(
platform_expert_device, CFSTR("board-id"), kCFAllocatorDefault, 0);
请注意,属性 值可以采用不同的类型,包括 CFNumber
、CFBoolean
、CFString
、CFData
、CFArray
和CFDictionary
,你需要准备好处理类型与你期望的不匹配的情况,或者当返回 NULL 时(如果 属性 不存在)。使用 CFGetTypeID()
检查类型,例如:
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);
}