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 
main(int argc,char ** argv)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