linux 用c++监听插入u盘
要实现在Linux上使用C++监听插入U盘的功能,需要使用udev库。以下是一个简单的示例代码:
#include <iostream>
#include <libudev.h>
int main() {
struct udev *udev = udev_new();
if (!udev) {
std::cerr << "Failed to create udev context\n";
return -1;
}
struct udev_monitor *mon = udev_monitor_new_from_netlink(udev, "udev");
if (!mon) {
std::cerr << "Failed to create udev monitor\n";
udev_unref(udev);
return -1;
}
udev_monitor_filter_add_match_subsystem_devtype(mon, "block", "disk");
udev_monitor_enable_receiving(mon);
int fd = udev_monitor_get_fd(mon);
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd, &fds);
while (true) {
if (select(fd+1, &fds, NULL, NULL, NULL) <= 0) {
continue;
}
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);
if (action && devnode && std::string(action) == "add") {
std::cout << "U disk inserted: " << devnode << std::endl;
}
udev_device_unref(dev);
}
}
udev_monitor_unref(mon);
udev_unref(udev);
return 0;
}
该代码使用udev库创建了一个udev监视器,并将其设置为监视“block”子系统的“disk”设备。然后使用select()函数来等待监视器的文件描述符上发生事件。如果监视器收到了“add”事件,就表示插入了U盘,此时获取设备节点并输出。循环一直进行,直到程序被手动停止
原文地址: https://www.cveoy.top/t/topic/e9mQ 著作权归作者所有。请勿转载和采集!