我目前正在构建一个Carputer前端,它需要的一个功能是能够识别何时插入外部媒体,例如USB / SD记忆棒或iPod。插入后,我将扫描设备上的音乐/视频/图像并将其添加到媒体库中。或者,我需要知道何时删除这些设备,以便我可以从当前可用的媒体中删除添加的项目。
我的问题是,在使用C ++的Linux环境中监控磁盘插入/删除的最佳方法是什么?
我可以监视/ media文件夹,以便Linux自动安装磁盘,但这是完成任务的最佳方法吗?感谢您的任何见解!
答案 0 :(得分:7)
您可以阅读kernel uevents from a NetLink socket。它提供有关设备添加/删除,mount / umount的事件。
- Netlink
监听netlink的守护进程 socket接收一个数据包 每个hotplug事件,包含 相同的信息是usermode助手 会在环境中得到 变量
netlink数据包包含一组 null终止的文本行。首先 netlink数据包的行结合起来
$ACTION
和$DEVPATH
值, 由@(在符号)分隔。每 第一行后包含一行 定义热插拔的KEYWORD=VALUE
对 事件变量。[...]
ACTION
当前的hotplug操作:“添加”添加设备,“删除”删除 它。 2.6.22内核也可以生成“改变”,“在线”, “离线”和“移动”行动。
您可能希望监控mount
和umount
操作。请注意,事件不会为您提供设备节点或实际安装点,而只提供设备的sysfs节点。如果设备节点管理和挂载管理由外部进程(例如udev)处理,则您必须使用主设备号和次设备号/proc/mounts
自行查找设备节点和挂载点。
答案 1 :(得分:4)
如果您的系统上正在运行hald
,则可以查看org.freedesktop.Hal.Manager.DeviceAdded
DBUS信号。
坐骑有点值得注意,如果你无法控制安装者,你可能需要轮询/proc/mounts
。我认为没有办法从pmount或gnome-volume-manager收到通知。 KDE 4的Solid可能会为此提供一个界面,但我还没有挖掘它。