linux下通过ID获取设备的bus和device编号C++
时间: 2024-03-01 16:55:09 浏览: 151
Linux通过设备号找到设备的方法
在 Linux 下,可以通过读取 `/proc/bus/usb/devices` 文件来获取 USB 设备的 Bus 和 Device 编号。具体步骤如下:
1. 获取设备的 ID 号,可以通过读取 `/sys/bus/usb/devices/` 目录下的 `idVendor` 和 `idProduct` 文件得到。
```c++
std::string idVendor, idProduct;
std::ifstream ifs("/sys/bus/usb/devices/your_device_path/idVendor");
if (ifs.is_open()) {
std::getline(ifs, idVendor);
ifs.close();
}
ifs.open("/sys/bus/usb/devices/your_device_path/idProduct");
if (ifs.is_open()) {
std::getline(ifs, idProduct);
ifs.close();
}
std::string deviceID = idVendor + ":" + idProduct;
```
2. 读取 `/proc/bus/usb/devices` 文件,解析文件中的信息,找到与设备 ID 号匹配的设备信息,即可得到设备的 Bus 和 Device 编号。
```c++
std::string busnum, devnum;
std::string devicesFile = "/proc/bus/usb/devices";
std::ifstream ifs(devicesFile);
if (ifs.is_open()) {
std::string line;
bool foundDevice = false;
while (std::getline(ifs, line)) {
if (line.find("ID") != std::string::npos) {
std::string id = line.substr(line.find("ID") + 3);
if (id == deviceID) {
foundDevice = true;
}
}
if (foundDevice && line.find("Bus=") != std::string::npos) {
busnum = line.substr(line.find("Bus=") + 4, 3);
}
if (foundDevice && line.find("Dev#=") != std::string::npos) {
devnum = line.substr(line.find("Dev#=") + 5, 3);
break;
}
}
ifs.close();
}
```
注意,以上代码中的 `your_device_path` 需要替换成你想要获取信息的设备路径。另外,由于 `/proc/bus/usb/devices` 文件的访问权限比较高,需要以 root 权限运行程序才能读取该文件。
阅读全文