linux /dev/uinput,linux uinput:简单示例?
我有一些问题让 双方 使用的代码边uinput工作。基于uinput入门:用户级别输入子系统[死链接;存档 ]我总结了以下 作家 (减去错误处理):int main(int ac, char **av){int fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);int ret = ioctl(fd, UI_SET_EVBIT, EV_ABS);ret
我有一些问题让 双方 使用的代码边uinput工作。
基于uinput入门:用户级别输入子系统[死链接;存档 ]我总结了以下 作家 (减去错误处理):
int main(int ac, char **av)
{
int fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
int ret = ioctl(fd, UI_SET_EVBIT, EV_ABS);
ret = ioctl(fd, UI_SET_ABSBIT, ABS_X);
struct 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_DEV_CREATE);
struct input_event ev = {0};
ev.type = EV_ABS;
ev.code = ABS_X;
ev.value = 42;
ret = write(fd, &ev, sizeof(ev));
getchar();
ret = ioctl(fd, UI_DEV_DESTROY);
return EXIT_SUCCESS;
}
这似乎可行,至少input_event似乎已编写了完整的结构。
然后,我写出了我最能想到的事件的天真的 读者 :
int main(int ac, char **av)
{
int fd = open(av[1], O_RDONLY);
char name[256] = "unknown";
ioctl(fd, EVIOCGNAME(sizeof(name)), name);
printf("reading from %s\n", name);
struct input_event ev = {0};
int ret = read(fd, &ev, sizeof(ev));
printf("Read an event! %i\n", ret);
printf("ev.time.tv_sec: %li\n", ev.time.tv_sec);
printf("ev.time.tv_usec: %li\n", ev.time.tv_usec);
printf("ev.type: %hi\n", ev.type);
printf("ev.code: %hi\n", ev.code);
printf("ev.value: %li\n", ev.value);
return EXIT_SUCCESS;
}
不幸的是,读者方面根本无法工作。每次只能读取8个字节,这几乎不是完整的input_event结构。
我犯了什么愚蠢的错误?
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)