使用C ++在Linux中监控磁盘安装的最佳方法?

时间:2009-01-29 18:52:21

标签: c++ linux

我目前正在构建一个Carputer前端,它需要的一个功能是能够识别何时插入外部媒体,例如USB / SD记忆棒或iPod。插入后,我将扫描设备上的音乐/视频/图像并将其添加到媒体库中。或者,我需要知道何时删除这些设备,以便我可以从当前可用的媒体中删除添加的项目。

我的问题是,在使用C ++的Linux环境中监控磁盘插入/删除的最佳方法是什么?

我可以监视/ media文件夹,以便Linux自动安装磁盘,但这是完成任务的最佳方法吗?感谢您的任何见解!

2 个答案:

答案 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内核也可以生成“改变”,“在线”,   “离线”和“移动”行动。

您可能希望监控mountumount操作。请注意,事件不会为您提供设备节点或实际安装点,而只提供设备的sysfs节点。如果设备节点管理和挂载管理由外部进程(例如udev)处理,则您必须使用主设备号和次设备号/proc/mounts自行查找设备节点和挂载点。

答案 1 :(得分:4)

如果您的系统上正在运行hald,则可以查看org.freedesktop.Hal.Manager.DeviceAdded DBUS信号。

坐骑有点值得注意,如果你无法控制安装者,你可能需要轮询/proc/mounts。我认为没有办法从pmountgnome-volume-manager收到通知。 KDE 4的Solid可能会为此提供一个界面,但我还没有挖掘它。

相关问题