如何以编程方式检索OSX板id信息
How to retrieve OS X board-id information programmatically
如何在c++中以编程方式检索以下信息:
这是Mac OSX中的终端命令:
ioreg -c IOPlatformExpertDevice | awk '/board-id/ {print $4}' | awk -F '"' '{print $2}'
我使用IOKit库来检索信息,如IOPlatformSerialNumber和PlatformUUID信息。但我找不到任何对应的"板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);
}
相关文章:
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 如何获取 GLFW 窗口 ID?
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 错误:令牌 { '{' 之前应存在非限定 ID
- C ++是否有C ++ 17 OSX 10.13.6的标志
- 断言"id < 0"在Qt ActiveX中失败
- 什么是 mac osx 上 POSIX 的线程 ID
- osx上的小线程ID
- 如何以编程方式检索OSX板id信息