如何在 Linux 上使用 Ruby 实现实时 USB 存储检测?
Posted
技术标签:
【中文标题】如何在 Linux 上使用 Ruby 实现实时 USB 存储检测?【英文标题】:How to achieve realtime usb storage detection with Ruby on Linux? 【发布时间】:2017-09-18 21:41:32 【问题描述】:我认为 ruby-dbus 可能是正确的解决方案,但我似乎找不到任何关于如何实时检测的示例,只要存储设备连接到 Linux 机器。有人有这样的例子吗?
【问题讨论】:
请阅读“How to Ask”。您要求我们推荐场外资源,这是题外话。 我不是,我在问如何在 Linux 上使用 Ruby 实现实时 USB 存储检测。一些示例代码会很棒。 【参考方案1】:您似乎可以采用多种不同的方法。Here's a Ruby implementation I found 使用 Ruby FFI 链接到 libusb
。
这样做的好处是 libusb 支持热插拔通知,所以这可以满足您的需要:http://libusb.sourceforge.net/api-1.0/hotplug.html
来自libusb Ruby docs:
设备热插拔支持
如果
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
来检测任何要处理的事件来完成。
【讨论】:
谢谢你,我没有意识到 libusb 支持热插拔,太完美了!以上是关于如何在 Linux 上使用 Ruby 实现实时 USB 存储检测?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Juggernaut 聊天服务器(由 ruby on rails 提供支持)与 iPhone/Android 应用程序集成以进行实时聊天?