| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Вновь подключенное usb-устройство |
| Автор: _GRIN_ 28.2.2009, 18:49 |
| Приветствую. Необходимо при подключении usb-флэшки автоматически её примонтировать и (сразу же) после примонтирования писать на неё определённые данные. Вопрос - есть ли в Линукс-е какие-либо системные уведомления о вновь подключенных устройствах и если есть, то как их можно перехватить. Если нет (уведомлений), то как можно получить данную информацию (на вскидку в голову приходи переодичский монторинг директории /dev)? Заранее благодарен |
| Автор: nickless 28.2.2009, 19:58 |
| Что это за программа, нужно ли ей работать со старыми версиями ядра, на встроенных девайсах, только в консоли или под иксами? Новыми девайсами обычно занимается http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html, он создаёт файл в /dev, может примонтировать, послать сообщение итд (если написать соответствующее правило). В оконных менеджерах вроде гнома или кде есть свой демон, который мониторит что надо. Можно посмотреть как они это делают или (если программа с ГУИ) воспользоваться их API. |
| Автор: _GRIN_ 28.2.2009, 21:51 | ||
nickless,
программа - демон (серсис) - работает в консоли, старые версии ядра не нужны (под 2.6. и выше). спасибо за наводку на udev |
| Автор: MAKCim 1.3.2009, 11:34 |
суть в том, что udev демон читает uevent'ы (через AF_NETLINK сокет), генерируемые на объектах ядра kobject любое устройство в linux представлено базовым объектом struct device, которое агрегирует объект struct kobject подключение устройства к USB шине порождает создание объекта device и регистрацию его в объектной иерархии ядра (экспортируется через sysfs) через соответствующий объект kobject инициализируя kobject, http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/lib/kobject_uevent.c#L268 и http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/lib/kobject_uevent.c#L228, присоединенным к соответствующей группе (по-моему 0) в рамках протокола NETLINK_KOBJECT_UEVENT домена udev тупо читает пакет и соотносит его содержимое со своими правилами |
| Автор: _GRIN_ 2.3.2009, 01:10 |
| MAKCim, спасибо, честно сказать - я на линукс в декабре пересел (т.е. всего ничего, так что и знаний пока маловато). Буду курить сорцы udev (как в своё время top, free) там по ходу дела наверняка вопросы возникнут |
| Автор: GrayCardinal 2.3.2009, 10:04 |
| _GRIN_, Не парь себе мозги. Заюзай inotify на /dev, тебе сразу и свистнут что девайс появился... inotify_init(2) |
| Автор: MAKCim 2.3.2009, 11:39 | ||
знаешь чем плох сей способ? |
| Автор: GrayCardinal 2.3.2009, 16:58 |
| MAKCim, Нет. Чем ? |
| Автор: MAKCim 3.3.2009, 14:27 |
тем, что он зависит от конфигурации udev и его наличия |