【问题标题】:How to achieve realtime usb storage detection with Ruby on Linux?如何在 Linux 上使用 Ruby 实现实时 USB 存储检测?
【发布时间】:2017-09-18 21:41:32
【问题描述】:

我认为 ruby​​-dbus 可能是正确的解决方案,但我似乎找不到任何关于如何实时检测的示例,只要存储设备连接到 Linux 机器。有人有这样的例子吗?

【问题讨论】:

  • 请阅读“How to Ask”。您要求我们推荐场外资源,这是题外话。
  • 我不是,我在问如何在 Linux 上使用 Ruby 实现实时 USB 存储检测。一些示例代码会很棒。

标签: ruby linux dbus libusb


【解决方案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 支持热插拔,太完美了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2020-08-08
相关资源
最近更新 更多