统信UOS系统如何使用libudev写udev监控

MoMo 2022年5月21日21:35:35
评论
537

安装libudev ,sudo apt-get install libudev-dev 使用libudev 使用udev需要先安装libudev库,在程序中包含libudev.h头文件,并且在编译时加上-ludev告诉编译器去链接udev库。

 

usb监控 // 使用udev_monitor_new_from_netlink创建一个新的monitor, // 函数的第二个参数是事件源的名称,可选"kernel"或"udev"。 // 基于"kernel"的事件通知要早于"udev",但相关的设备结点未必创建完成, // 所以一般应用的设计要基于"udev"进行监控 struct udev_monitor *mon = udev_monitor_new_from_netlink(udev, "udev");

 

// 使用udev_monitor_filter_add_match_subsystem_devtype增加一个基于设备类型的udev事件过滤器 udev_monitor_filter_add_match_subsystem_devtype(mon, "block", nullptr); udev_monitor_filter_add_match_subsystem_devtype(mon, "usb", nullptr);

 

// 使用udev_monitor_enable_receiving启动监控过程 udev_monitor_enable_receiving(mon);

 

// 监控可以使用udev_monitor_get_fd获取一个文件描述符,基于返回的fd可以执行poll操作,简化程序设计

 

int fd = udev_monitor_get_fd(mon); while (m_status) { fd_set fds; FD_ZERO(&fds); FD_SET(fd, &fds); // Wait for monitor to return int ret = select(fd + 1, &fds, nullptr, nullptr, nullptr);

 

例:

if (ret > 0) {

if (FD_ISSET(fd, &fds)) {

// 插拔事件到达后,可以使用udev_monitor_receive_device获取产生事件的设备映射

struct udev_device *dev = udev_monitor_receive_device(mon);

process_device(dev);

}

 

}

https://xpanx.com/
MoMo
  • 本文由 发表于 2022年5月21日21:35:35
  • 转载请务必保留本文链接:https://xpanx.com/3942.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: