Лучший способ контролировать монтирование дисков в Linux с помощью C ++? - PullRequest
8 голосов
/ 29 января 2009

В настоящее время я создаю интерфейс Carputer, и одна из функций, которая ему нужна, - это возможность распознавать, когда вставлен внешний носитель, например, карты памяти USB / SD или iPod. После их вставки я буду сканировать устройство на наличие музыки / видео / изображений и добавлять их в медиатеку. Кроме того, мне нужно знать, когда эти устройства будут удалены, чтобы я мог удалить добавленные элементы с доступных на данный момент носителей.

Мой вопрос заключается в том, как лучше всего отслеживать вставку / извлечение дисков в среде Linux с использованием C ++?

Я мог бы отслеживать папку / media, когда Linux монтирует диски автоматически, но является ли это лучшим способом для выполнения задачи? Спасибо за понимание!

Ответы [ 2 ]

7 голосов
/ 29 января 2009

Вы можете прочитать события ядра из сокета NetLink . Он предоставляет события о добавлении / удалении устройства, mount / umount.

- Netlink

Демон, слушающий netlink сокет получает пакет данных для каждое событие горячего подключения, содержащее та же информация помощник пользовательского режима получит в среду переменные.

Пакет netlink содержит набор текстовые строки с нулевым символом в конце. Первый линия пакета netlink объединяет значения $ACTION и $DEVPATH, разделены символом @ (в знак). каждый строка после первого содержит KEYWORD=VALUE пара, определяющая горячее подключение переменная события.

[...]

АКЦИЯ

Текущее действие горячей замены: «добавить», чтобы добавить устройство, «удалить», чтобы удалить Это. Ядро 2.6.22 также может генерировать «изменения», «онлайн», действия "offline" и "move".

Вы, вероятно, хотите отслеживать действия mount и umount. Обратите внимание, что событие не дает вам ни узла устройства, ни фактической точки монтирования, а только узел sysfs устройства. Если управление узлами устройства и управление монтированием обрабатываются внешним процессом (например, udev), вам придется самостоятельно определить узел устройства и точку монтирования, используя основные и вспомогательные номера устройств и /proc/mounts.

4 голосов
/ 30 января 2009

Если в вашей системе работает hald, вы можете наблюдать за сигналом org.freedesktop.Hal.Manager.DeviceAdded DBUS.

Монстры - это немного сложная задача, если вы не контролируете монтера, вам может потребоваться набрать /proc/mounts для этого. Я не вижу способа получать уведомления от pmount или gnome-volume-manager . Интерфейс KDE 4 Solid может предоставить интерфейс для этого, но я не копался в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...