以下是一个简单的示例代码,演示如何使用libudev库获取当前所有USB设备的信息:
#include <iostream>
#include <libudev.h>
int main() {
struct udev *udev = udev_new();
if (!udev) {
std::cerr << "Failed to create udev context" << std::endl;
return 1;
}
struct udev_enumerate *enumerate = udev_enumerate_new(udev);
if (!enumerate) {
std::cerr << "Failed to create enumerate object" << std::endl;
udev_unref(udev);
return 1;
}
// 添加过滤条件,只匹配USB子系统
udev_enumerate_add_match_subsystem(enumerate, "usb");
// 扫描设备
udev_enumerate_scan_devices(enumerate);
// 获取设备列表
struct udev_list_entry *devices = udev_enumerate_get_list_entry(enumerate);
// 遍历设备列表并打印信息
struct udev_list_entry *entry;
udev_list_entry_foreach(entry, devices) {
const char* path = udev_list_entry_get_name(entry);
struct udev_device* device =
udev_device_new_from_syspath(udev, path);
const char* devnode =
udev_device_get_devnode(device);
const char* sysname =
udev_device_get_sysname(device);
std::cout << "Device Node: " << devnode << std::endl;
std::cout << "System Name: " << sysname << std::endl;
// 释放设备资源
if (device)
udev_device_unref(device);
}
// 释放资源
udev_enumerate_unref(enumerate);
udev_unref(udev);
return 0;
}
请注意,这只是一个简单的示例,可能还需要根据实际情况进行调整。编译时需要链接libudev库,可以使用命令g++ -o usb_info demo.cpp -ludev 进行编译。执行程序后,将会输出当前系统中所有USB设备的设备节点和系统名称信息。<br/><br/><br/><p style="color:#CCCCCC;font-size:12px;">内容由零声教学AI助手提供,问题来源于学员提问</p> |