Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux uinput:简单的例子?_Linux_Uinput - Fatal编程技术网

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();

为什么需要同步事件?