fork(1) download
  1. #define _POSIX_C_SOURCE 199309L
  2.  
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <unistd.h>
  6.  
  7. void timespec_diff(const struct timespec * start, const struct timespec *stop,
  8. struct timespec *result) {
  9. if ((stop->tv_nsec - start->tv_nsec) < 0) {
  10. result->tv_sec = stop->tv_sec - start->tv_sec - 1;
  11. result->tv_nsec = stop->tv_nsec - start->tv_nsec + 1000000000;
  12. } else {
  13. result->tv_sec = stop->tv_sec - start->tv_sec;
  14. result->tv_nsec = stop->tv_nsec - start->tv_nsec;
  15. }
  16. return;
  17. }
  18.  
  19. void timespec_print(const char * description,
  20. const struct timespec *start, const struct timespec *stop) {
  21. struct timespec result;
  22. timespec_diff(start, stop, &result);
  23. double seconds = result.tv_sec + result.tv_nsec / 1e9;
  24. printf("times elapsed for clock '%s': %lf\n", description, seconds);
  25. return;
  26. }
  27.  
  28. int main(void) {
  29. struct timespec start_clock_realtime;
  30. struct timespec start_clock_monotonic;
  31. struct timespec start_clock_process_cputime_id;
  32. struct timespec start_clock_thread_cputime_id;
  33.  
  34. struct timespec finish_clock_realtime;
  35. struct timespec finish_clock_monotonic;
  36. struct timespec finish_clock_process_cputime_id;
  37. struct timespec finish_clock_thread_cputime_id;
  38.  
  39. clock_gettime(CLOCK_REALTIME, &start_clock_realtime);
  40. clock_gettime(CLOCK_MONOTONIC, &start_clock_monotonic);
  41. clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_clock_process_cputime_id);
  42. clock_gettime(CLOCK_THREAD_CPUTIME_ID, &start_clock_thread_cputime_id);
  43.  
  44. sleep(3); // seconds
  45.  
  46. clock_gettime(CLOCK_REALTIME, &finish_clock_realtime);
  47. clock_gettime(CLOCK_MONOTONIC, &finish_clock_monotonic);
  48. clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &finish_clock_process_cputime_id);
  49. clock_gettime(CLOCK_THREAD_CPUTIME_ID, &finish_clock_thread_cputime_id);
  50.  
  51. timespec_print("realtime",
  52. &start_clock_realtime, &finish_clock_realtime);
  53. timespec_print("monotonic",
  54. &start_clock_monotonic, &finish_clock_monotonic);
  55. timespec_print("process cputime id",
  56. &start_clock_process_cputime_id, &finish_clock_process_cputime_id);
  57. timespec_print("thread cputime id",
  58. &start_clock_thread_cputime_id, &finish_clock_thread_cputime_id);
  59.  
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
times elapsed for clock 'realtime': 3.000057
times elapsed for clock 'monotonic': 3.000057
times elapsed for clock 'process cputime id': 0.000007
times elapsed for clock 'thread cputime id': 0.000007