#include #include #include #include #include #include #include void usage(const char *progname) { fprintf(stderr, "Usage: %s /dev/input/eventX\n", progname); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int fd; struct input_event ev; ssize_t n; if (argc != 2) { usage(argv[0]); } // Open the evdev device provided in the command line argument fd = open(argv[1], O_RDONLY); if (fd < 0) { perror("Error opening device"); exit(EXIT_FAILURE); } printf("Listening for events on %s. Press Ctrl+C to exit.\n", argv[1]); // Event reading loop while (1) { n = read(fd, &ev, sizeof(ev)); if (n == (ssize_t)-1) { if (errno == EINTR) {printf("EINTR\n"); continue;} perror("Error reading event"); break; } else if (n != sizeof(ev)) { fprintf(stderr, "Short read: %zd\n", n); break; } // Print the event information printf("Event: time %ld.%06ld, type %d, code %d, value %d\n", ev.time.tv_sec, ev.time.tv_usec, ev.type, ev.code, ev.value); } close(fd); return 0; }