【发布时间】:2017-09-18 21:41:32
【问题描述】:
我认为 ruby-dbus 可能是正确的解决方案,但我似乎找不到任何关于如何实时检测的示例,只要存储设备连接到 Linux 机器。有人有这样的例子吗?
【问题讨论】:
-
请阅读“How to Ask”。您要求我们推荐场外资源,这是题外话。
-
我不是,我在问如何在 Linux 上使用 Ruby 实现实时 USB 存储检测。一些示例代码会很棒。
我认为 ruby-dbus 可能是正确的解决方案,但我似乎找不到任何关于如何实时检测的示例,只要存储设备连接到 Linux 机器。有人有这样的例子吗?
【问题讨论】:
您似乎可以采用多种不同的方法。
Here's a Ruby implementation I found 使用 Ruby FFI 链接到 libusb。
这样做的好处是 libusb 支持热插拔通知,所以这可以满足您的需要:
http://libusb.sourceforge.net/api-1.0/hotplug.html
设备热插拔支持
如果
LIBUSB.has_capability?(:CAP_HAS_HOTPLUG)返回true,则可以使用对设备热插拔的支持。这需要 Linux 或 MacOS 上的 libusb-1.0.16 或更新版本。 Windows 支持仍在进行中。可以使用 {
LIBUSB::Context#on_hotplug_event} 注册热插拔事件处理程序。然后,您需要致电 {LIBUSB::Context#handle_events} 以接收任何事件。这可以通过阻塞调用(可能在它自己的线程中)或使用 {LIBUSB::Context#pollfds} 来检测任何要处理的事件来完成。
【讨论】: