从ruby中的输入设备读取

时间:2014-05-11 11:03:08

标签: ruby linux io linux-device-driver

我正在尝试从ruby中的输入设备读取事件。

然而

File.open('/dev/input/event9').read 16

返回异常:

Errno::EINVAL: Invalid argument @ io_fread - /dev/input/event9
from (pry):1:in `read'

IO documentation中read方法的签名解释了对fread方法的引用(在ruby中读取调用C中相应的fread)。

然而,EINVAL错误似乎是指发送到输入设备的错误建议,但我并不理解。

为了解决这个问题,我已经知道要提交给用户组烫发没有任何运气。

我的问题是:在我的情况下,“无效参数”错误意味着什么?

1 个答案:

答案 0 :(得分:3)

请参阅man 2 readfread后面的系统调用失败。

   EINVAL fd is attached to an object which is unsuitable for reading;  or
          the  file  was  opened  with  the  O_DIRECT flag, and either the
          address specified in buf, the value specified in count,  or  the
          current file offset is not suitably aligned.

这基本上意味着附加到/dev/input/event9的驱动程序对所请求的操作不满意。在您的情况下,可能是由于对齐问题(读取大小错误),请参阅https://www.kernel.org/doc/Documentation/input/input.txt以获取有关事件协议以及应如何读取事件设备的详细信息。