home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / pdksh-4.9-src.tgz / tar.out / contrib / pdksh / std / posix / times.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  1KB  |  57 lines

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