getrusage.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /* $Id: getrusage.c,v 1.11 1998/12/12 19:57:51 momjian Exp $ */
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include "rusagestub.h"
  5. /* This code works on:
  6.  * univel
  7.  * solaris_i386
  8.  * sco
  9.  * solaris_sparc
  10.  * svr4
  11.  * hpux 9.*
  12.  * which currently is all the supported platforms that don't have a
  13.  * native version of getrusage().  So, if configure decides to compile
  14.  * this file at all, we just use this version unconditionally.
  15.  */
  16. int
  17. getrusage(int who, struct rusage * rusage)
  18. {
  19. struct tms tms;
  20. int tick_rate = CLK_TCK; /* ticks per second */
  21. clock_t u,
  22. s;
  23. if (rusage == (struct rusage *) NULL)
  24. {
  25. errno = EFAULT;
  26. return -1;
  27. }
  28. if (times(&tms) < 0)
  29. {
  30. /* errno set by times */
  31. return -1;
  32. }
  33. switch (who)
  34. {
  35. case RUSAGE_SELF:
  36. u = tms.tms_utime;
  37. s = tms.tms_stime;
  38. break;
  39. case RUSAGE_CHILDREN:
  40. u = tms.tms_cutime;
  41. s = tms.tms_cstime;
  42. break;
  43. default:
  44. errno = EINVAL;
  45. return -1;
  46. }
  47. #define TICK_TO_SEC(T, RATE) ((T)/(RATE))
  48. #define TICK_TO_USEC(T,RATE) (((T)%(RATE)*1000000)/RATE)
  49. rusage->ru_utime.tv_sec = TICK_TO_SEC(u, tick_rate);
  50. rusage->ru_utime.tv_usec = TICK_TO_USEC(u, tick_rate);
  51. rusage->ru_stime.tv_sec = TICK_TO_SEC(s, tick_rate);
  52. rusage->ru_stime.tv_usec = TICK_TO_USEC(u, tick_rate);
  53. return 0;
  54. }