如何使用 c 获取总线和开发信息

Posted

技术标签:

【中文标题】如何使用 c 获取总线和开发信息【英文标题】:how to get bus and dev info using c 【发布时间】:2014-02-18 09:18:08 【问题描述】:

我想使用 C 语言读取连接到 PC 的 USB 串行设备的总线和开发。我怎样才能得到它,请帮助我...示例我想从下面读取 Trust International USB 设备总线信息和设备信息。

lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 014: ID 15d9:0a4f Trust International B.V. 
Bus 001 Device 009: ID 046d:c312 Logitech, Inc. DeLuxe 250 Keyboard
Bus 001 Device 004: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

如何使用C语言?

【问题讨论】:

希望对您有所帮助。github.com/gregkh/lsusb 【参考方案1】:

在标准 C 中没有办法做到这一点,因为标准 C 没有提到 USB。

您需要使用特定于平台的代码,这使其非常适合将其包装到库中。

这样一个非常常用的库是libusb。是这样描述的:

libusb 是一个 C 库,可让应用程序轻松访问许多不同操作系统上的 USB 设备。

【讨论】:

【参考方案2】:

您可以从 popen() 方法执行 lsusb,然后将 fgets() 作为字符数组执行 lsusb 报告的各个行。

然后使用 sscanf() 或您选择的任何其他字符串操作函数从每个数组中提取总线和设备 ID,因为总线和设备 ID 的位置始终是固定的。

【讨论】:

以上是关于如何使用 c 获取总线和开发信息的主要内容,如果未能解决你的问题,请参考以下文章

【NIC】如何使用 ethtool 命令管理以太网卡

如何从 Windows 服务总线订阅中获取未处理的消息计数?

如何从 Win32 API 中的总线关系中获取设备实例路径

如何获取事件总线指标 Vertx 与 Prometheus 集成

如何使用 PowerShell 脚本使用函数应用默认密钥和服务总线连接字符串更新 Key Vault 机密

STM32G0学习手册——I2C总线使用(使用硬件I2C-HAL库)