【LinuxC/C++开发】udev监测USB事件
- 电脑硬件
- 2025-08-24 00:42:02

前言
本人的国产化桌面系统项目需要对接入Linux系统的USB设备进行事件及更详细的信息管理,libusb库是不够的,需要使用udev库,比如我的项目需要区分摄像头/位图设备、存储设备、鼠标键盘设备等的插拔事件,此时需要调用udev库,下文主要讲解C/C++开发怎么引用udev库。
功能讲解 1、apt方式下载库 sudo apt install libudev-dev //usbudev.cpp #include <iostream> #include <libudev.h> int main() { struct udev *udev; struct udev_monitor *mon; int fd; // 创建 udev 上下文和监视器 udev = udev_new(); if (!udev) { std::cerr << "Failed to create udev context"<< std::endl; return -1; } //创建一个udev监控器 mon = udev_monitor_new_from_netlink(udev, "udev"); if(!mon){ std::cerr << "udev_monitor_new_from_netlink fail!"<< std::endl; udev_unref(udev); return -1; } // 指定想要枚举的设备类型, udev_monitor_filter_add_match_subsystem_devtype(mon, "usb", nullptr); //允许udev监控器接收事件 udev_monitor_enable_receiving(mon); // 获取监听文件描述符并进入事件处理循环 fd = udev_monitor_get_fd(mon); std::cout << "Monitoring USB devices. Press Ctrl+C to exit." << std::endl; while (true) { fd_set fds; FD_ZERO(&fds); FD_SET(fd, &fds); // 等待文件描述符就绪 if (select(fd + 1, &fds, NULL, NULL, NULL) > 0) { //接收设备事件 struct udev_device *dev = udev_monitor_receive_device(mon); if (dev) { const char *action = udev_device_get_action(dev); const char *devnode = udev_device_get_devnode(dev); // Get bus and device numbers const char* busnum = udev_device_get_property_value(dev, "BUSNUM"); //std::cout << "busnum: [" << busnum << "]" << std::endl; const char* devnum = udev_device_get_property_value(dev, "DEVNUM"); //std::cout << "devnum: [" << devnum << "]" << std::endl; if (action && devnode) { std::cout << "Action: " << action << ", Device Node: " << devnode << " busnum: " << busnum << ", devnum: " << devnum << std::endl; //std::cout << "busnum: [" << busnum << "]" << std::endl; //std::cout << "devnum: [" << devnum << "]" << std::endl; } udev_device_unref(dev); } } } udev_monitor_unref(mon); udev_unref(udev); return 0; }编译命令加上-ludev库:
g++ usbudev.cpp -ousbudev -ludev 2、离线方式在通过apt安装好lidudev库是设备上拷贝以下两个文件出来,放到离线设备的同路径下:
/usr/include/libudev.h /usr/lib/x86_64-linux-gnu/libudev.so安装完成之后,上面usbudev.cpp的代码也编译通过。另外本篇提供了统信UOS系统的libudev的资源,需要离线开发及部署的朋友可以去下载。
【LinuxC/C++开发】udev监测USB事件由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【LinuxC/C++开发】udev监测USB事件”