ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

主板、电池、操作系统与网络:hwinfo 剩余硬件信息接口完整参考手册

主板、电池、操作系统与网络:hwinfo 剩余硬件信息接口完整参考手册 主板、电池、操作系统与网络hwinfo 剩余硬件信息接口完整参考手册【免费下载链接】hwinfocross platform C library for hardware information (CPU, RAM, GPU, ...)项目地址: https://gitcode.com/gh_mirrors/hw/hwinfohwinfo 是一个跨平台的 C 硬件信息库这篇文章是它主板、电池、操作系统、网络四大硬件信息接口的完整参考带你从零读懂每个接口能拿到什么、在哪些平台可用几分钟即可上手调用。 快速开始3 步引入 hwinfohwinfo 采用 MIT 许可支持 Linux、macOS 与 Windows只需一个 C 编译器即可构建。第一步克隆仓库git clone https://gitcode.com/gh_mirrors/hw/hwinfo第二步用 CMake 构建cd hwinfo cmake -B build -DCMAKE_BUILD_TYPERelease cmake --build build --config Release第三步在 CMake 项目中链接可选组件开关见 CMakeLists.txtfind_package(hwinfo REQUIRED) target_link_libraries(your_target PRIVATE lfreist-hwinfo::hwinfo) 小贴士每个组件都可以单独链接比如只链接lfreist-hwinfo::os和lfreist-hwinfo::battery让最终产物更小巧。下面逐个拆解 4 个接口。所有头文件都集中在include/hwinfo/目录下总入口是include/hwinfo/hwinfo.h。️ 主板信息接口MainBoard 完整字段解析主板是整机身份的核心。MainBoard类定义于 include/hwinfo/mainboard.h提供 4 个只读方法构造一次即可无需全局函数方法返回内容典型值示例vendor()主板厂商ASUSTeK COMPUTER INC.name()主板型号PRIME Z490-Aversion()版本号Rev 1.xxserialNumber()主板序列号——#include hwinfo/hwinfo.h hwinfo::MainBoard main_board; // 构造函数内部完成全部探测 std::cout main_board.vendor() main_board.name() \n;底层原理以 Linux 为例实现在 src/linux/mainboard.cpp库会依次读取/sys/class/dmi/id/下的board_vendor、board_name、board_version、board_serial文件——这正是 DMI/SMBIOS 规范暴露的硬件标识。找不到时返回unknown而不是报错保证程序永不因缺少硬件信息而崩溃。各平台支持情况字段LinuxmacOSWindows厂商 vendor✅✅✅型号 name✅❌✅版本 version✅❌✅序列号 serialNumber❌✅✅ 电池监控接口Battery 电量与充电状态笔记本用户的重点来了。电池接口通过自由函数getAllBatteries()返回std::vectorBattery头文件 include/hwinfo/battery.h自动枚举系统中所有电池方法说明vendor()/model()电池厂商与型号serialNumber()电池序列号technology()化学体系如 Li-ionenergyFull()/energyNow()满容量与当前能量微焦耳capacity()剩余电量比例0.0 ~ 1.0charging()/discharging()充电 / 放电中state()CHARGING/DISCHARGING/UNKNOWN三态枚举for (const auto battery : hwinfo::getAllBatteries()) { std::cout battery.model() (battery.capacity() * 100) % (battery.charging() ? 充电中 : 放电中) \n; }capacity()的计算逻辑src/battery.cpp 第 39 行非常直观energyNow / energyFull且满容量为 0 时安全返回 0不会除零。⚠️ 注意Linux 上电池数据来自/sys/class/power_supply/BATx/src/linux/battery.cpp。台式机通常没有BAT0目录getAllBatteries()会返回空列表——记得先判断empty()再遍历示例见 examples/system_infoMain.cpp 第 101 行。 操作系统信息接口OS 一行代码读全部OS类include/hwinfo/os.h同样是构造即用一次性缓存所有结果方法说明name()系统名如 Ubuntu 24.04 LTSversion()版本号kernel()内核版本is32bit()/is64bit()架构位宽isBigEndian()/isLittleEndian()字节序hwinfo::OS os; std::cout os.name() os.version() (kernel os.kernel() , (os.is64bit() ? 64 : 32) bit)\n;Linux 实现src/linux/os.cpp有两个值得学习的技巧解析/etc/os-release的PRETTY_NAME与VERSION字段兼容所有主流发行版字节序用 16 位整数内存布局判断char16_t dummy 0x0102跨平台且零依赖。 网络接口Network 枚举网卡、MAC 与 IP网络接口返回所有网络适配器列表每个Networkinclude/hwinfo/network.h包含 5 个字段方法说明interfaceIndex()接口索引description()接口描述Linux 上即接口名如 eth0mac()MAC 地址ip4()/ip6()IPv4 / IPv6 地址for (const auto net : hwinfo::getAllNetworks()) { if (net.ip4().empty() net.ip6().empty()) continue; // 跳过空接口 std::cout net.description() net.mac() net.ip4() \n; }Linux 实现src/linux/network.cpp用getifaddrs()遍历全部地址族只保留AF_PACKET层接口去重再从/sys/class/net/iface/address读 MAC——这套组合拳对虚拟网卡、Docker 网桥同样有效。 四大接口平台支持总览接口LinuxmacOSWindowsMainBoard 主板部分字段部分字段部分字段Battery 电池✅部分字段❌OS 操作系统✅部分字段部分字段Network 网络✅✅✅注macOS 上主板型号/版本、Windows 上电池字段等个别能力仍在开发中完整矩阵见 README.md 的 Supported Components 表格。❓ 常见问题排查Q1返回值是unknown怎么办这是正常设计而非异常。常见于虚拟机无 DMI 信息、容器环境或硬件未上报字段。建议展示前先判空。Q2getAllBatteries()返回空列表台式机或 Windows 平台不支持电池详细信息见上表直接显示无电池即可参考 examples/system_infoMain.cpp 第 104 行的处理方式。Q3需要实时监控电量变化hwinfo是快照式 API每次调用都重新读取系统数据。做成 1 秒一次的轮询即可也可结合src/下的 monitoring 组件构建监控面板。Q4想关闭不需要的组件减小体积构建时设置-DHWINFO_BATTERYOFF、-DHWINFO_OSOFF等 CMake 开关只编译你要的模块。写在最后主板、电池、操作系统、网络——这 4 个接口与 CPU、内存、GPU、磁盘接口一起构成了 hwinfo 完整的硬件画像能力。所有接口统一遵循构造/枚举即用、缺失值返回unknown、跨平台零配置的设计哲学无论你在 Linux 服务器还是 Windows 工作站同一份代码都能跑起来。打开include/hwinfo/目录下的头文件对照本文十分钟即可在你的项目里输出一份完整的硬件报告。【免费下载链接】hwinfocross platform C library for hardware information (CPU, RAM, GPU, ...)项目地址: https://gitcode.com/gh_mirrors/hw/hwinfo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表