Linux C++ 实时监听U盘插入:使用udev库实现

在 Linux 上使用 C++ 监听插入 U 盘的功能,需要使用 udev 库。udev 是一个内核子系统,它负责管理系统中的设备。通过 udev,我们可以获取设备的各种信息,例如设备节点、设备类型、设备属性等等。

以下是一个简单的示例代码,演示了如何使用 udev 库监听 U 盘插入事件:

#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;
}

代码解释:

  1. 使用 udev_new() 创建一个 udev 上下文。
  2. 使用 udev_monitor_new_from_netlink() 创建一个 udev 监视器,并将其设置为监听 'udev' 网络接口。
  3. 使用 udev_monitor_filter_add_match_subsystem_devtype() 设置监视器的过滤条件,使其只监听 'block' 子系统的 'disk' 设备,也就是 U 盘。
  4. 使用 udev_monitor_enable_receiving() 启用监视器。
  5. 获取监视器的文件描述符,并使用 select() 函数等待事件发生。
  6. 当监视器收到事件时,使用 udev_monitor_receive_device() 获取设备信息。
  7. 判断事件类型是否为 'add',如果是,则输出设备节点信息。
  8. 最后,释放资源并退出程序。

注意:

  • 为了使用 udev 库,需要安装 libudev-dev 包。
  • 需要使用 root 权限运行程序。
  • 代码中使用了 std::string 类,需要包含 <string> 头文件。

通过这段代码,我们可以实现在 Linux 上实时监听 U 盘插入事件,并在插入 U 盘时获取设备节点信息,从而进行进一步的操作。

更多示例:

  • 获取 U 盘的容量信息
  • 读取 U 盘上的文件
  • 在 U 盘上写入文件

参考资料:

希望这篇文章对你有所帮助!

Linux C++ 实时监听U盘插入:使用udev库实现

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

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