如何在 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 存储检测?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 实时活动通知

如何实时查看linux下的日志

如何实时查看linux下的日志

如何将 Juggernaut 聊天服务器(由 ruby​​ on rails 提供支持)与 iPhone/Android 应用程序集成以进行实时聊天?

如何在 ubuntu 上卸载 Ruby?

如何在suse linux中安装redis集群