当前位置:网站首页>libudev 使用说明书
libudev 使用说明书
2022-07-30 12:56:00 【Ruo_Xiao】
一、初始化
首先调用 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_name 和 udev_list_entry_get_value 获取属性的名称和值。
(SAW:Game Over!)
边栏推荐
- TaskDispatcher源码解析
- OpenHarmony环境搭建报错: ImportError: cannot import name ‘VERSION‘ from ‘hb.__main__‘
- [PostgreSQL] - Storage structure and cache shared_buffers
- 物理服务器与虚拟机:主要区别和相似之处
- no matching host key type found. Their offer: ssh-rsa
- 智能指针实现猜想
- 666666
- 第十五天笔记
- R语言筛选时间序列数据的子集(subset time series data)、使用window函数筛选连续日期时间范围内的数据(start参数和end参数分别指定起始和结束时间)
- 一本通循环结构的程序设计第一章题解(1)
猜你喜欢

Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇

展厅全息投影所具备的三大应用特点

OpenHarmony环境搭建报错: ImportError: cannot import name ‘VERSION‘ from ‘hb.__main__‘

ModelCoder状态机:对柴油机工况判断策略进行建模

腾讯称电竞人才缺口200万;华为鸿蒙3.0正式发布;乐视推行每周工作4天半?...丨黑马头条...

【语音识别】基于GMM-HMM的语音识别系统

【河北工业大学】考研初试复试资料分享

如何判断自己是否适合IT行业?方法很简单

物理服务器与虚拟机:主要区别和相似之处

Greenplum 6.0有哪些不可错过的硬核升级与应用?
随机推荐
[PostgreSQL] - 存储结构及缓存shared_buffers
13-GuliMall Basics Summary
RTSP/Onvif协议视频平台EasyNVR服务一键升级功能的使用教程
浅析TSINGSEE智能视频分析网关的AI识别技术及应用场景
R语言ggstatsplot包grouped_ggwithinstats函数可视化分组小提琴图、并添加假设检验结果(包含样本数、统计量、效应大小及其置信区间、显著性、组间两两比较、贝叶斯假设)
每天学一点Scala之 伴生类和伴生对象
腰部外骨骼机器人线性自抗扰控制器参数优化
dolphinscheduler adds hana support
Apache Log4j2漏洞
如何将EasyCVR平台RTSP接入的设备数据迁移到EasyNVR中?
EasyNVS cloud management platform function reconstruction: support for adding users, modifying information, etc.
结合实战,浅析GB/T28181(三)——实况点播
DOM常用方法以及项目
strlen跟sizeof区别
int a=8,a=a++,a? int b=8,b=b+1,b?
Yilian: Activating the Value Potential of Data Elements and Unleashing the Innovation Dividend of SAS SSD
MySQL【多表查询】
ES6 Set与Map是什么,如何使用
[PostgreSQL] - explain SQL analysis introduction
qq udp tcp机制