4
두 가지 문제가 있습니다. 코드를 사용하는 코드가 모두입니다.linux uinput : 간단한 예?
는 Getting started with uinput: the user level input subsystem을 바탕으로 나는 작가 (마이너스 오류 처리) 다음과 함께 넣어 : 작동하는 것 같다
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
구조가 아닙니다.
어리석은 실수는 무엇입니까?
왜 동기화 이벤트가 필요합니까? – dtmland