我目前正在构建一个Carputer前端,它需要的一个功能是能够识别何时插入外部媒体,例如USB/SD记忆棒或iPod.插入后,我将扫描设备上的音乐/视频/图像并将其添加到媒体库中.或者,我需要知道何时删除这些设备,以便我可以从当前可用的媒体中删除添加的项目.
我的问题是,在使用C++的Linux环境中监视磁盘插入/删除的最佳方法是什么?
我可以监视/ media文件夹,以便Linux自动安装磁盘,但这是完成任务的最佳方法吗?感谢您的任何见解!
您可以从NetLink套接字读取内核uevents.它提供有关设备添加/删除,mount/umount的事件.
- Netlink
监听netlink套接字的守护进程接收每个hotplug事件的数据包,其中包含usermode帮助程序在环境变量中接收的相同信息.
netlink数据包包含一组空终止的文本行.netlink数据包的第一行组合了
$ACTION
和$DEVPATH
值,用@(at符号)分隔.第一行之后的每一行包含一KEYWORD=VALUE
对定义hotplug事件变量的行.[...]
行动
当前的hotplug操作:"添加"以添加设备,"删除"以删除它.2.6.22内核还可以生成"更改","在线","离线"和"移动"操作.
您可能想要监控mount
和umount
操作.请注意,事件不会为您提供设备节点或实际安装点,而只提供设备的sysfs节点.如果设备节点管理和挂载管理由外部进程(例如udev)处理,则必须使用主设备号和次设备号自行找出设备节点和挂载点/proc/mounts
.