我需要使用我的 C++ 程序列出现有的 USB 集线器以及集线器中连接的设备。
我可以使用命令从终端打印 USB 集线器和连接在集线器中的设备
lsusb
lsusb -v
我想在我的 C++ 程序中使用该功能。
我如何以编程方式执行此操作。是否有任何 C++ 类可在我的 Qt 应用程序中使用。
答案1
这是最简单的模拟lsusb
:
#include <stdio.h>
#include <usb.h>
main(){
struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for (bus = usb_busses; bus; bus = bus->next)
for (dev = bus->devices; dev; dev = dev->next){
printf("Trying device %s/%s\n", bus->dirname, dev->filename);
printf("\tID_VENDOR = 0x%04x\n", dev->descriptor.idVendor);
printf("\tID_PRODUCT = 0x%04x\n", dev->descriptor.idProduct);
}
}
编译用-lusb
答案2
这是 Fedora,对于基于 Debian 的发行版,您应该能够执行类似的操作:
- 获取包含该程序的软件包:“rpm -qif /usr/bin/lsusb”告诉您它来自 usbutils 软件包,主页是http://www.linux-usb.org
- 查看那里发布的源代码(大概是 C 语言,应该很容易从那里提取您需要的内容)
或者:
- 找出内核在哪里/如何发布有关 USB 设置的信息,即 /sys/bus/usb/devices 显示整个设置
- 了解该信息的组织方式(这是为了便于解析而设置的,因此处理起来应该不会太难)
绝望的解决办法:
- 只需运行 lsusb(8) 程序本身并从其输出中获取所需的数据
顺便说一句,请考虑使用 Python 而不是 C++ 来编写 GUI 应用程序。 GUI 很少对性能足够关键,并且程序员时间的节省足以抵消任何效率损失(而且用户可能不会注意到它们)。