将事件添加到Udev事件队列
作者:互联网
我的一个udev规则运行了一个删除USB存储设备的脚本.此脚本执行一些常规清理并删除存储设备的挂载点目录.问题是我希望能够以编程方式从我的C应用程序中触发此逻辑(而不是当usb闪存驱动器被热插拔移除时,这似乎为时已晚).
实现此目的的正确方法似乎是直接在udev事件队列中添加事件.我能够使用udevadm实现所需的操作,但是在libudev库中没有看到等效的API.
udevadm trigger --action=remove --property-match=DEVNAME=/dev/sda1
有没有办法通过dbus访问udev来实现这一目标?有一个图书馆可以让我这样做吗?这最终不是udev应该如何工作,我应该卸载&在我的应用程序中清理块设备而不是让udev这样做?
解决方法:
您正在寻找的是/ sys sysfs文件系统中的uevent伪文件.
通过向该文件写入命令(例如“remove”),内核会将这些命令转发给设备事件的用户空间处理程序,即udevd.
所以做相当于下面的代码片段(使用shell作为示例)应该做你想要的,请求udev删除/ dev / sda1设备:
# echo -n "remove" >/sys/class/block/sda1/uevent
您可以使用libudev API(例如,udev_device_get_syspath(3)来帮助您找到给定设备的正确sysfs路径.
您可以在kobject下找到内核方面的一些文档.
您还可以在udev的文档中找到一些提及“uevents”的内容,例如udevd’s man page中的“systemd-udevd侦听内核uevents”.
但似乎没有关于sysfs的uevent伪文件的大量文档……
标签:c,block-device,udev 来源: https://codeday.me/bug/20190815/1660025.html