+ pid = fork();
+ /* epoll setup */
+ if ((epfd=epoll_create(5)) < 0)
+ die("Failing on epoll_create");
+ epev.data.fd = fd;
+ epev.events = EPOLLIN;
+ if (epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &epev))
+ die("Failing in epoll_ctl");
+ /* main loop */
+ //while (1) {
+ if ((n=epoll_wait(epfd, events, MAX_EPOLL_EV, -1)) < 0)
+ die("error on epoll_wait");
+ debug("Got %i events\n", n);
+ /* loop on epoll events */
+ for (i=0; i<n; i++) {
+ if (events[i].data.fd == fd) { // if timer expired
+ printf("Timer expired:\n");
+ while(nread=read(fd, &expirated, sizeof(expirated))) {
+ if (nread < 0) {
+ if (errno != EAGAIN)
+ die("signalfd read error");
+ else
+ break;
+ }
+ if (nread != sizeof(expirated)) {
+ printf("Error on timer data read, '\n");
+ continue;
+ }
+ printf("Expired %llu times\n", expirated);
+ if (pid == 0) {
+ printf("in child\n");
+ } else {
+ printf("in father\n");
+ }
+ }
+ }
+ }
+ // }