内核技术中文网»首页 论坛 圈点 查看内容

0 评论

0 收藏

分享

linux c++ 调用libudev获取当前所有usbkey的信息并给出demo

以下是一个简单的示例代码,演示如何使用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>

回复

举报 使用道具

全部回复
暂无回帖,快来参与回复吧
主题 6339
回复 0
粉丝 0
扫码获取每晚技术直播链接
快速回复 返回顶部 返回列表