linux uinput:简单的例子?
我在使用linux uinput:简单的例子?,linux,uinput,Linux,Uinput,我在使用uinput工作时遇到了一些问题 基于[dead link;]我编写了以下编写器(减去错误处理): int main(int ac,char**av) { int fd=打开(“/dev/uinput”,O_WRONLY | O_NONBLOCK); int ret=ioctl(fd、UI设置、EVBIT、EV ABS); ret=ioctl(fd、UI\U SET\U ABSBIT、ABS\U X); 结构uinput_user_dev uidev={0}; snprintf(uide
uinput
工作时遇到了一些问题
基于[dead link;]我编写了以下编写器(减去错误处理):
int main(int ac,char**av)
{
int fd=打开(“/dev/uinput”,O_WRONLY | O_NONBLOCK);
int ret=ioctl(fd、UI设置、EVBIT、EV ABS);
ret=ioctl(fd、UI\U SET\U ABSBIT、ABS\U X);
结构uinput_user_dev uidev={0};
snprintf(uidev.name,UINPUT_MAX_name_SIZE,“UINPUT rotary”);
uidev.absmin[ABS_X]=0;
uidev.absmax[ABS_X]=255;
ret=write(fd,&uidev,sizeof(uidev));
ret=ioctl(fd,UI\u DEV\u CREATE);
结构输入事件ev={0};
ev.type=ev_ABS;
ev.code=ABS\U X;
ev.value=42;
ret=写入(fd和ev,sizeof(ev));
getchar();
ret=ioctl(fd,用户界面开发);
返回退出成功;
}
这似乎是可行的,至少完整的input\u事件
结构似乎已经编写好了
然后,我写了我能想到的最天真的事件读者:
int main(int ac,char**av)
{
int fd=打开(仅限av[1];
字符名[256]=“未知”;
ioctl(fd,eviogname(sizeof(name)),name);
printf(“读取%s\n”,名称);
结构输入事件ev={0};
int ret=读取(fd和ev,大小(ev));
printf(“读取事件!%i\n”,ret);
printf(“ev.time.tv_秒:%li\n”,ev.time.tv_秒);
printf(“ev.time.tv\u usec:%li\n”,ev.time.tv\u usec);
printf(“ev.type:%hi\n”,ev.type);
printf(“电动代码:%hi\n”,电动代码);
printf(“ev.value:%li\n”,ev.value);
返回退出成功;
}
不幸的是,读者端根本不起作用;每次只能读取8个字节,这几乎不是一个完整的input\u事件
结构
我犯了什么愚蠢的错误?您还应该在实际事件之后编写同步事件。在编写器端代码中:
struct input_event ev = {0};
ev.type = EV_ABS;
ev.code = ABS_X;
ev.value = 42;
usleep(1500);
memset(&ev, 0, sizeof(ev));
ev.type = EV_SYN;
ev.code = 0;
ev.value = 0;
ret = write(fd, &ev, sizeof(ev));
getchar();
为什么需要同步事件?