| // RUN: %clangxx -O0 -g %s -o %t && %run %t | FileCheck %s |
| #include <assert.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include <time.h> |
| #include <sys/timerfd.h> |
| #include <unistd.h> |
| |
| int main (int argc, char** argv) |
| { |
| int fd = timerfd_create(CLOCK_REALTIME, 0); |
| assert(fd >= 0); |
| |
| struct itimerspec its; |
| its.it_value.tv_sec = 0; |
| its.it_value.tv_nsec = 1000000; |
| its.it_interval.tv_sec = its.it_value.tv_sec; |
| its.it_interval.tv_nsec = its.it_value.tv_nsec; |
| |
| int res = timerfd_settime(fd, 0, &its, NULL); |
| assert(res != -1); |
| |
| struct itimerspec its2; |
| res = timerfd_settime(fd, 0, &its, &its2); |
| assert(res != -1); |
| assert(its2.it_interval.tv_sec == its.it_interval.tv_sec); |
| assert(its2.it_interval.tv_nsec == its.it_interval.tv_nsec); |
| assert(its2.it_value.tv_sec <= its.it_value.tv_sec); |
| assert(its2.it_value.tv_nsec <= its.it_value.tv_nsec); |
| |
| struct itimerspec its3; |
| res = timerfd_gettime(fd, &its3); |
| assert(res != -1); |
| assert(its3.it_interval.tv_sec == its.it_interval.tv_sec); |
| assert(its3.it_interval.tv_nsec == its.it_interval.tv_nsec); |
| assert(its3.it_value.tv_sec <= its.it_value.tv_sec); |
| assert(its3.it_value.tv_nsec <= its.it_value.tv_nsec); |
| |
| |
| unsigned long long buf; |
| res = read(fd, &buf, sizeof(buf)); |
| assert(res == 8); |
| assert(buf >= 1); |
| |
| res = close(fd); |
| assert(res != -1); |
| |
| printf("DONE\n"); |
| // CHECK: DONE |
| |
| return 0; |
| } |