#include #include #include #include #include #include #include #include void refresh(int fd) { ioctl(fd,1); } void change_id(int fd,int id) { ioctl(fd,2,id); } void verify_message(int fd) { char buff[256]; int r=read(fd,buff,256); if(r<0) { perror("verify_message"); return; } if(r==0) { printf("not fresh\n"); return; } printf("message: %.*s",r,buff); } int wait_refresh(int fd) { fd_set fds; struct timeval tv; int r; FD_ZERO(&fds); FD_SET(fd,&fds); tv.tv_sec=10; tv.tv_usec=0; r=select(fd+1,&fds,NULL,NULL,&tv); if(r<0) printf("select returned with signal or error\n"); else if(r==0) printf("time out\n"); else if(FD_ISSET(fd,&fds)) { printf("refreshed\n"); return 1; } return 0; } int main(void) { int fd; char buff[256]; fd=open("/dev/ljtest0",O_RDWR); if(fd<0) { fprintf(stderr,"cannot open device\n"); return 1; } verify_message(fd); verify_message(fd); refresh(fd); verify_message(fd); change_id(fd,1); refresh(fd); verify_message(fd); while(1) { verify_message(fd); wait_refresh(fd); } close(fd); return 0; }