#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int fd_ready_to_read(int fd) { struct timeval tv={0,0}; fd_set kbd_set; FD_ZERO(&kbd_set); FD_SET(fd,&kbd_set); select(FD_SETSIZE,&kbd_set,NULL,NULL,&tv); return (FD_ISSET(fd,&kbd_set)); } int key_fifo() { int fd,child_pid; FILE *fp; fp=popen("keydrv","r"); fscanf(fp,"%d",&child_pid); pclose(fp); do { usleep(10000); } while (access("/tmp/jckey-driver",R_OK)); fd=open("/tmp/jckey-driver",O_RDONLY); return fd; } main() { unsigned char key; int console_fd=key_fifo(); while (1) { if (fd_ready_to_read(console_fd)) { read(console_fd,&key,1); printf("read key (%d)\n\r",(int)key); } else usleep(10000); } }