libudev 使用说明书

一、初始化

首先调用 udev_new,创建一个 udev library context。udev library context 采用引用记数机制,创建的 context 默认引用记数为 1,使用 udev_ref 和 udev_unref 增加或减少引用记数,如果引用记数为0,则释放内部资源。

二、枚举设备

使用 udev_enumerate_new 创建一个枚举器,用于扫描系统已接设备。使用 udev_enumerate_ref 和 udev_enumerate_unref 增加或减少引用记数。

使用 udev_enumerate_add_match / nomatch_xxx 系列函数增加枚举的过滤器,过滤关键字以字符表示,如"block"设备。

使用 udev_enumerate_scan_xxx 系列函数扫描 /sys 目录下,所有与过滤器匹配的设备。扫描完成后的数据结构是一个链表,使用 udev_enumerate_get_list_entry 获取链表的首个结点,使用 udev_list_entry_foreach 遍历整个链表。

三、监控设备插拔 udev 的设备插拔基于 netlink 实现。

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

使用 udev_monitor_filter_add_match_subsystem_devtype 增加一个基于设备类型的 udev 事件过滤器,例如: "block"设备。

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

插拔事件到达后,可以使用 udev_monitor_receive_device 获取产生事件的设备映射。调用 udev_device_get_action 可以获得一个字符串:"add"或者"remove",以及"change", "online", "offline"等,但后三个未知什么情况下会产生。

四、获取设备信息

使用 udev_list_entry_get_name 可以得到一个设备结点的 sys 路径,基于这个路径使用 udev_device_new_from_syspath 可以创建一个 udev 设备的映射,用于获取设备属性。获取设备属性使用 udev_device_get_properties_list_entry,返回一个存储了设备所有属性信息的链表,使用 udev_list_entry_foreach 遍历链表,使用 udev_list_entry_get_nameudev_list_entry_get_value 获取属性的名称和值。

转载:libudev使用说明书_coroutines的博客-CSDN博客_libudev

(SAW:Game Over!)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值