从ruby读取USB输入流。

只是一点背景知识,我正在使用Linux Mint(32位)中的原始数据流。 它来自我的库ruby-buzz ,它从数据流文件中读取24位的块。

我刚刚用Linux Mint(32位)重新安装了我的笔记本电脑,突然间我看到错误Errno::EINVAL: Invalid argument @ io_fread

 ajfaraday@squishy ~ $ sudo chmod 777 /dev/input/by-id/* ajfaraday@squishy ~ $ irb 2.2.1 :001 > path = '/dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00' => "/dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00" 2.2.1 :002 > f = File.open(path) => # 2.2.1 :003 > f.read(24) Errno::EINVAL: Invalid argument @ io_fread - /dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00 from (irb):3:in `read' from (irb):3 from /home/ajfaraday/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `' 2.2.1 :004 > f.read(32) => "\xAB>xW\x0E\xDC\x00\x00\x01\x00\xC0\x02\x01\x00\x00\x00\xAB>xW\x0E\xDC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 

在同一系统上,使用相同的输入设备,我在/ dev / input文件中看到了创建的问题,但不包含任何数据流

我不知道为什么我以前一直很好用tail -f来观察来自终端的原始数据流,以及为什么我以前能够使用file.read(24)从中获取24位块ruby。 包括安装Mint。 但现在我也无法做到。

我不完全理解我找到的解决方案,但它可能会帮助任何人遇到同样的问题,所以这里。

它似乎是Linux Mint的32位体系结构的结果,它不允许file.read方法使用不是2的幂的参数(例如file.read )。 我不知道为什么会这样。

但是,使用64位版本的Mint重新安装,这可以像我之前在KDE安装上看到的那样(回想起来,它可能是64位架构)。