2016-07-02 54 views
1

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

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

[email protected] ~ $ sudo chmod 777 /dev/input/by-id/* 
[email protected] ~ $ 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) 
=> #<File:/dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00> 
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 `<main>' 
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 file created, but contains no data stream

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

回答

0

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

它似乎是Linux Mint的32位体系结构的一个结果,它不会允许file.read方法使用非2的幂(例如8,16,32)的参数。我不知道这是为什么。然而,使用Mint的64位版本重新安装,这种方式与我之前在我的KDE安装(回想起来可能是64位体系结构)中看到的一样。