#include #include #include #include #include #include #include #include #include #include #define RTC "/dev/rtc" int run = 1; #define NR_THREADS 3 void *func(void *dat) { int fd = (int)dat; unsigned long data; while (run) { ioctl(fd, RTC_PIE_ON, 0); read(fd, &data, sizeof(data)); ioctl(fd, RTC_PIE_OFF, 0); printf("%08lx\n",data); } return NULL; } int main(int argc, char **argv) { int fd; int i; pthread_t t[NR_THREADS]; if ((fd = open(RTC, O_RDONLY|O_NONBLOCK)) < 0) { perror(RTC); exit(0); } ioctl(fd, RTC_IRQP_SET, 1024); for (i=0; i < NR_THREADS; i++) { if (pthread_create(&t[i],NULL,func, (void*)fd)) { perror("pthread_creat"); exit(-1); } } sched_yield(); run = 0; for (i=0; i < NR_THREADS; i++) pthread_join(t[i], NULL); close (fd); exit(0); }