home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / apps / posix / source / SH / STD / POSIX / TIMES.C < prev    next >
C/C++ Source or Header  |  1999-11-17  |  1KB  |  56 lines

  1. /* P1003.1 times emulation */
  2.  
  3. #include <sys/times.h>
  4.  
  5. #if _BSD
  6.  
  7. #include <sys/time.h>
  8. #include <sys/resource.h>
  9.  
  10. static    long base_tv_sec = 0;
  11.  
  12. clock_t
  13. times(tmsp)
  14.     register struct tms *tmsp;
  15. {
  16.     struct timeval tv;
  17.     struct rusage ru;
  18.  
  19.     getrusage(RUSAGE_SELF, &ru);
  20.     tmsp->tms_utime = ru.ru_utime.tv_sec*CLK_TCK
  21.         + (long)ru.ru_utime.tv_usec*CLK_TCK/1000000;
  22.     tmsp->tms_stime = ru.ru_stime.tv_sec*CLK_TCK
  23.         + (long)ru.ru_stime.tv_usec*CLK_TCK/1000000;
  24.     getrusage(RUSAGE_CHILDREN, &ru);
  25.     tmsp->tms_cutime = ru.ru_utime.tv_sec*CLK_TCK
  26.         + (long)ru.ru_utime.tv_usec*CLK_TCK/1000000;
  27.     tmsp->tms_cstime = ru.ru_stime.tv_sec*CLK_TCK
  28.         + (long)ru.ru_stime.tv_usec*CLK_TCK/1000000;
  29.  
  30.     gettimeofday(&tv, (struct timezone *)NULL);
  31.     if (base_tv_sec == 0)
  32.         base_tv_sec = tv.tv_sec;
  33.     tv.tv_sec -= base_tv_sec; /*  prevent clock_t overflow */
  34.     return tv.tv_sec*CLK_TCK + (long)tv.tv_usec*CLK_TCK/1000000;
  35. }
  36.  
  37. #endif
  38.  
  39. #if _V7
  40.  
  41. clock_t
  42. times(tmsp)
  43.     struct tms *tmsp;
  44. {
  45.     struct timeb tb;
  46.  
  47. #undef times            /* access real times() */
  48.     times(tmsp);
  49. #define times times_
  50.     ftime(&tb);
  51.     return tb.time*CLK_TCK + (long)tb.millitm*CLK_TCK/1000;
  52. }
  53.  
  54. #endif
  55.  
  56.