Как добиться обнаружения USB-накопителей в реальном времени с помощью Ruby в Linux?
Я думаю, что ruby-dbus может быть правильным решением, но я не могу найти какие-либо примеры того, как обнаруживать в режиме реального времени, когда устройство хранения подключено к машине Linux. У кого-нибудь есть такой пример?
1 ответ
Кажется, есть много разных подходов, которые вы могли бы использовать.
Вот реализация Ruby, я обнаружил, что ссылки на libusb
с Руби FFI.
Что хорошо в этом, так это то, что libusb поддерживает уведомления о горячей замене, поэтому это может быть то, что вам нужно:
http://libusb.sourceforge.net/api-1.0/hotplug.html
Из документации по libusb Ruby:
Поддержка горячего подключения устройства
Поддержка горячего подключения устройства может быть использована, если
LIBUSB.has_capability?(:CAP_HAS_HOTPLUG)
возвращает истину. Для этого требуется libusb-1.0.16 или новее в Linux или MacOS. Поддержка Windows все еще в пути.Обработчик события горячего подключения можно зарегистрировать в {
LIBUSB::Context#on_hotplug_event
}. Затем вам нужно позвонить {LIBUSB::Context#handle_events
} для того, чтобы получать любые события. Это можно сделать как блокирующие вызовы (возможно, в собственном потоке) или с помощью {LIBUSB::Context#pollfds
} чтобы обнаружить любые события для обработки.