linux下用cpp获取所有usb设备的bus和device编号和id
时间: 2024-03-01 21:55:35 浏览: 28
可以使用libusb库来获取所有USB设备的bus和device编号和id。
以下是一个简单的示例代码,可以列出所有已连接的USB设备的详细信息:
```cpp
#include <iostream>
#include <libusb-1.0/libusb.h>
int main(int argc, char** argv) {
libusb_device **devs;
libusb_context *ctx = NULL;
// 初始化libusb库
int r = libusb_init(&ctx);
if (r < 0) {
std::cerr << "Failed to initialize libusb" << std::endl;
return 1;
}
// 获取所有已连接的USB设备列表
ssize_t cnt = libusb_get_device_list(ctx, &devs);
if (cnt < 0) {
std::cerr << "Failed to get device list" << std::endl;
return 1;
}
std::cout << "Number of USB devices: " << cnt << std::endl;
// 遍历设备列表并打印每个设备的信息
for (ssize_t i = 0; i < cnt; i++) {
libusb_device *dev = devs[i];
libusb_device_descriptor desc;
// 获取设备描述符
r = libusb_get_device_descriptor(dev, &desc);
if (r < 0) {
std::cerr << "Failed to get device descriptor" << std::endl;
continue;
}
std::cout << "Device " << i << ": ";
std::cout << "VendorID=" << desc.idVendor << ", ";
std::cout << "ProductID=" << desc.idProduct << ", ";
// 获取设备所在的bus和device编号
uint8_t bus = libusb_get_bus_number(dev);
uint8_t addr = libusb_get_device_address(dev);
std::cout << "Bus=" << static_cast<int>(bus) << ", ";
std::cout << "Device=" << static_cast<int>(addr) << std::endl;
}
// 释放设备列表
libusb_free_device_list(devs, 1);
// 关闭libusb库
libusb_exit(ctx);
return 0;
}
```
这个程序将会输出每个USB设备的VendorID、ProductID、Bus和Device编号。