linux下通过ID号获取设备的bus和device编号C++
时间: 2024-03-01 20:55:02 浏览: 178
在 C++ 中,可以通过读取 `/sys/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. 遍历 `/sys/bus/usb/devices/` 目录下的所有目录,找到与设备 ID 号匹配的目录,读取该目录下的 `busnum` 和 `devnum` 文件即可得到设备的 Bus 和 Device 编号。
```c++
std::string busnum, devnum;
std::string devicesDir = "/sys/bus/usb/devices/";
std::vector<std::string> deviceDirs;
// 遍历所有设备目录
for (const auto& entry : std::filesystem::directory_iterator(devicesDir)) {
if (entry.is_directory()) {
deviceDirs.push_back(entry.path().string());
}
}
// 在设备目录中找到与设备 ID 号匹配的目录
for (const auto& deviceDir : deviceDirs) {
std::string deviceIdFile = deviceDir + "/idVendor:idProduct";
std::ifstream ifs(deviceIdFile);
if (ifs.is_open()) {
std::string deviceId;
std::getline(ifs, deviceId);
ifs.close();
if (deviceId == deviceID) {
std::ifstream ifs(deviceDir + "/busnum");
if (ifs.is_open()) {
std::getline(ifs, busnum);
ifs.close();
}
ifs.open(deviceDir + "/devnum");
if (ifs.is_open()) {
std::getline(ifs, devnum);
ifs.close();
}
break;
}
}
}
```
注意,以上代码中的 `your_device_path` 需要替换成你想要获取信息的设备路径。
阅读全文