要实现在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盘,此时获取设备节点并输出。循环一直进行,直到程序被手动停止

linux 用c++监听插入u盘

原文地址: https://www.cveoy.top/t/topic/e9mQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录