clock.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * clock - determine the processor time used
  3. */
  4. /* $Id$ */
  5. #include <time.h>
  6. #if defined(__BSD4_2)
  7. #define RUSAGE_SELF 0
  8. #define RUSAGE_CHILDREN -1
  9. struct rusage {
  10. struct timeval ru_utime; /* user time used */
  11. struct timeval ru_stime; /* system time used */
  12. long ru_maxrss;
  13. long ru_ixrss; /* integral shared memory size */
  14. long ru_idrss; /* integral unshared data size */
  15. long ru_isrss; /* integral unshared stack size */
  16. long ru_minflt; /* page reclaims */
  17. long ru_majflt; /* page faults */
  18. long ru_nswap; /* swaps */
  19. long ru_inblock; /* block input operations */
  20. long ru_oublock; /* block output operations */
  21. long ru_msgsnd; /* messages sent */
  22. long ru_msgrcv; /* messages received */
  23. long ru_nsignals; /* signals received */
  24. long ru_nvcsw; /* voluntary context switches */
  25. long ru_nivcsw; /* involuntary context switches */
  26. };
  27. void _getrusage(int who, struct rusage *rusage);
  28. #elif defined(_POSIX_SOURCE) || defined(__USG)
  29. struct tms {
  30. time_t tms_utime; /* user time */
  31. time_t tms_stime; /* system time */
  32. time_t tms_cutime; /* user time, children */
  33. time_t tms_cstime; /* system time, children */
  34. };
  35. long _times(struct tms *buffer);
  36. #else /* Version 7 UNIX */
  37. struct tbuffer {
  38. long proc_user_time;
  39. long proc_system_time;
  40. long child_user_time;
  41. long child_system_time;
  42. };
  43. long _times(struct tbuffer *buffer);
  44. #endif
  45. clock_t
  46. clock(void)
  47. {
  48. #if defined(__BSD4_2)
  49. struct rusage rusage;
  50. _getrusage(RUSAGE_SELF, &rusage);
  51. return (((unsigned long)rusage.ru_utime.tv_sec * CLOCKS_PER_SEC)
  52. + rusage.ru_utime.tv_usec);
  53. #elif defined(_POSIX_SOURCE) || defined(__USG)
  54. struct tms tms;
  55. _times(&tms);
  56. /* Assume that time_t can be converted to clock_t for Sys5 */
  57. return tms.tms_utime;
  58. #else
  59. struct tbuffer tbuffer;
  60. _times(&tbuffer);
  61. return tbuffer.proc_user_time;
  62. #endif
  63. }