首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当删除设备时,libudev udev_device_get_sysattr_value()为idVendor/idProduct返回NULL

当删除设备时,libudev udev_device_get_sysattr_value()为idVendor/idProduct返回NULL
EN

Stack Overflow用户
提问于 2018-12-30 10:02:33
回答 1查看 972关注 0票数 0

我正在尝试实现USB监控服务/守护进程,以检测特定的PID/VID设备。我可以很容易地通过过滤PID/VID来检测设备'add‘动作,但是当我从端口删除任何USB设备时,作为’删除‘动作的一部分,我尝试过滤PID/VID,就像在'add’动作中一样.通过使用

代码语言:javascript
运行
复制
const char* vendor = udev_device_get_sysattr_value(dev, "idVendor");

const char* product = udev_device_get_sysattr_value(dev, "idProduct");

但是在上面两个字符ptr中,我总是得到NULL。由于这个原因,我的删除操作将执行所有USB设备,这将从端口删除。

他们在libudev API中是否有其他方法来检测特定的设备删除?

EN

回答 1

Stack Overflow用户

发布于 2020-09-26 00:47:08

在我的经验中,一旦USB设备处于“删除”操作,udev_device_get_sysattr_value(dev)将返回NULL。即使是先前的“解除约束”操作也为时已晚。

检测特定设备删除的一种方法是在插入其dev节点时存储它。

首先,通过枚举设备(struct udev_enumerate*)(设备已经插入)和监视"add“或"bind”操作来查找要监视的struct udev_enumerate*。在这些状态中,udev_device_get_sysattr_value将返回您已经看到的正确字符串。如果该值与要监视的设备的值匹配,则通过调用udev_device_get_devnode(dev)检索其当前dev节点。存储该dev节点值(strdup用于复制其副本)。

在“取消绑定”或“删除”操作中,udev_device_get_devnode(dev)仍将返回与udev_device_get_sysattr_value(dev, prop_name)相反的适当值。将dev_node与先前存储的dev节点匹配,以确定该操作应用于正在监视的设备。

请注意,每次插入设备时,dev节点可能都会更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53976705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档