我目前正在构build一个Carputer前端,它需要的一个function是能够识别何时插入外部媒体,如USB / SD记忆棒或iPod。 插入后,我将扫描设备上的音乐/video/图像,并将其添加到媒体库中。 或者,我需要知道这些设备何时被移除,以便我可以从当前可用的媒体中删除添加的项目。
我的问题是,在使用C ++的Linux环境中监视磁盘插入/删除的最佳方法是什么?
我可以监视/ media文件夹,当Linux自动挂载磁盘,但这是完成任务的最佳方式? 感谢任何见解!
您可以从NetLink套接字读取内核事件 。 它提供有关设备添加/删除,挂载/卸载的事件。
– Netlink
监听netlink套接字的守护进程接收每个热插拔事件的数据包,其中包含usermode帮助程序在环境变量中接收到的相同信息。
netlink数据包包含一组空终止的文本行。 netlink数据包的第一行组合
$ACTION
和$DEVPATH
值,用@(符号)分隔。 第一行之后的每行都包含一个定义hotplug事件变量的KEYWORD=VALUE
对。[…]
行动
目前的hotplug动作:“添加”添加设备,“删除”删除它。 2.6.22内核还可以生成“更改”,“在线”,“离线”和“移动”操作。
您可能想要监视mount
和umount
操作。 请注意,事件不会为您提供设备节点或实际安装点,只有设备的sysfs节点。 如果设备节点管理和挂载管理由外部进程(例如udev)处理,则必须使用主要和次要设备编号以及/proc/mounts
自己找出设备节点和挂载点。
如果系统正在运行,您可以观察org.freedesktop.Hal.Manager.DeviceAdded
DBUS信号。
如果你不控制贴片机,你可能不得不轮询/proc/mounts
。 我看不出任何方式从pmount或gnome-volume-manager获取通知。 KDE 4的Solid可能提供了一个接口,但是我还没有深入研究。