Linux mouseevent中的fread返回3个字节,而不是16,sizeof(input_事件)

Linux mouseevent中的fread返回3个字节,而不是16,sizeof(input_事件),linux,mouse,mouseevent,Linux,Mouse,Mouseevent,在关于使用鼠标输入进行机器人里程测量的教程()之后,我创建了一个udev规则,将鼠标标识为自定义输入设备,并将其命名为/dev/odoml&/dev/odomr /etc/udev/rules.d/90-odom.rules: 子系统==“input”ATTRS{phys}==“usb-0000:00:1d.2-1/input0”,NAME=“odoml” usb端口识别鼠标。现在我尝试读取c中的鼠标输入: int f=打开(“开发/odoml”,仅限Ordu) 输入事件ev int read_

在关于使用鼠标输入进行机器人里程测量的教程()之后,我创建了一个udev规则,将鼠标标识为自定义输入设备,并将其命名为/dev/odoml&/dev/odomr

/etc/udev/rules.d/90-odom.rules:

子系统==“input”ATTRS{phys}==“usb-0000:00:1d.2-1/input0”,NAME=“odoml”

usb端口识别鼠标。现在我尝试读取c中的鼠标输入:

int f=打开(“开发/odoml”,仅限Ordu)
输入事件ev
int read_byes=(f,&ev,sizeof(输入事件))

我的问题是,大多数时候,我得到的是不完整的3,而不是预期的16字节的input_事件。 拔下鼠标似乎改变了一切:每10次鼠标都会按预期工作。一旦插入鼠标并read()正确读取16个字节,鼠标将在程序执行之间保持工作状态。如果鼠标不工作,它将不会开始工作,直到我重新插入鼠标并运气好——10个中有1个。我看不出它失败的规律性

每次文件都会正确打开。当鼠标停止工作时,cat/dev/odoml显示的数据较少。使用O_DIRECT打开设备失败。O_ASYNC、O_NDELAY没有帮助——它要么是-1,要么是3。我在4只不同的老鼠身上做了检查,其中3只表现出这种错误的行为


请帮助或指向正确的方向

输入子系统提供多个接口。您正在阅读的是传统鼠标界面,它提供了一个
/dev/psaux
风格的鼠标设备。(通常创建为
/dev/input/mouse*
设备)

您需要的是鼠标的事件接口,它通常创建为
/dev/input/event*
。它提供了16字节的
struct input\u事件

您必须调整
udev
规则以拾取“事件”设备而不是“鼠标”设备。尝试添加此条件:

KERNEL=="event[0-9]*"