Как добиться обнаружения 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} чтобы обнаружить любые события для обработки.

Другие вопросы по тегам