Home | History | Annotate | Download | only in Linux
      1 // RUN: %clangxx -O0 -g %s -o %t && %run %t | FileCheck %s
      2 #include <assert.h>
      3 #include <stdio.h>
      4 #include <string.h>
      5 #include <time.h>
      6 #include <sys/timerfd.h>
      7 #include <unistd.h>
      8 
      9 int main (int argc, char** argv)
     10 {
     11   int fd = timerfd_create(CLOCK_REALTIME, 0);
     12   assert(fd >= 0);
     13 
     14   struct itimerspec its;
     15   its.it_value.tv_sec = 0;
     16   its.it_value.tv_nsec = 1000000;
     17   its.it_interval.tv_sec = its.it_value.tv_sec;
     18   its.it_interval.tv_nsec = its.it_value.tv_nsec;
     19 
     20   int res = timerfd_settime(fd, 0, &its, NULL);
     21   assert(res != -1);
     22 
     23   struct itimerspec its2;
     24   res = timerfd_settime(fd, 0, &its, &its2);
     25   assert(res != -1);
     26   assert(its2.it_interval.tv_sec == its.it_interval.tv_sec);
     27   assert(its2.it_interval.tv_nsec == its.it_interval.tv_nsec);
     28   assert(its2.it_value.tv_sec <= its.it_value.tv_sec);
     29   assert(its2.it_value.tv_nsec <= its.it_value.tv_nsec);
     30 
     31   struct itimerspec its3;
     32   res = timerfd_gettime(fd, &its3);
     33   assert(res != -1);
     34   assert(its3.it_interval.tv_sec == its.it_interval.tv_sec);
     35   assert(its3.it_interval.tv_nsec == its.it_interval.tv_nsec);
     36   assert(its3.it_value.tv_sec <= its.it_value.tv_sec);
     37   assert(its3.it_value.tv_nsec <= its.it_value.tv_nsec);
     38 
     39 
     40   unsigned long long buf;
     41   res = read(fd, &buf, sizeof(buf));
     42   assert(res == 8);
     43   assert(buf >= 1);
     44 
     45   res = close(fd);
     46   assert(res != -1);
     47 
     48   printf("DONE\n");
     49   // CHECK: DONE
     50 
     51   return 0;
     52 }
     53