resource.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #ifndef _SYS_RESOURCE_H
  2. #include <resource/sys/resource.h>
  3. #ifndef _ISOMAC
  4. # include <time.h>
  5. # include <string.h>
  6. /* Internal version of rusage with a 64-bit time_t. */
  7. #if __TIMESIZE == 64
  8. # define __rusage64 rusage
  9. #else
  10. struct __rusage64
  11. {
  12. struct __timeval64 ru_utime;
  13. struct __timeval64 ru_stime;
  14. __extension__ union
  15. {
  16. long int ru_maxrss;
  17. __syscall_slong_t __ru_maxrss_word;
  18. };
  19. __extension__ union
  20. {
  21. long int ru_ixrss;
  22. __syscall_slong_t __ru_ixrss_word;
  23. };
  24. __extension__ union
  25. {
  26. long int ru_idrss;
  27. __syscall_slong_t __ru_idrss_word;
  28. };
  29. __extension__ union
  30. {
  31. long int ru_isrss;
  32. __syscall_slong_t __ru_isrss_word;
  33. };
  34. __extension__ union
  35. {
  36. long int ru_minflt;
  37. __syscall_slong_t __ru_minflt_word;
  38. };
  39. __extension__ union
  40. {
  41. long int ru_majflt;
  42. __syscall_slong_t __ru_majflt_word;
  43. };
  44. __extension__ union
  45. {
  46. long int ru_nswap;
  47. __syscall_slong_t __ru_nswap_word;
  48. };
  49. __extension__ union
  50. {
  51. long int ru_inblock;
  52. __syscall_slong_t __ru_inblock_word;
  53. };
  54. __extension__ union
  55. {
  56. long int ru_oublock;
  57. __syscall_slong_t __ru_oublock_word;
  58. };
  59. __extension__ union
  60. {
  61. long int ru_msgsnd;
  62. __syscall_slong_t __ru_msgsnd_word;
  63. };
  64. __extension__ union
  65. {
  66. long int ru_msgrcv;
  67. __syscall_slong_t __ru_msgrcv_word;
  68. };
  69. __extension__ union
  70. {
  71. long int ru_nsignals;
  72. __syscall_slong_t __ru_nsignals_word;
  73. };
  74. __extension__ union
  75. {
  76. long int ru_nvcsw;
  77. __syscall_slong_t __ru_nvcsw_word;
  78. };
  79. __extension__ union
  80. {
  81. long int ru_nivcsw;
  82. __syscall_slong_t __ru_nivcsw_word;
  83. };
  84. };
  85. #endif
  86. static inline void
  87. rusage64_to_rusage (const struct __rusage64 *restrict r64,
  88. struct rusage *restrict r)
  89. {
  90. /* Make sure the entire output structure is cleared, including
  91. padding and reserved fields. */
  92. memset (r, 0, sizeof *r);
  93. r->ru_utime = valid_timeval64_to_timeval (r64->ru_utime);
  94. r->ru_stime = valid_timeval64_to_timeval (r64->ru_stime);
  95. r->ru_maxrss = r64->ru_maxrss;
  96. r->ru_ixrss = r64->ru_ixrss;
  97. r->ru_idrss = r64->ru_idrss;
  98. r->ru_isrss = r64->ru_isrss;
  99. r->ru_minflt = r64->ru_minflt;
  100. r->ru_majflt = r64->ru_majflt;
  101. r->ru_nswap = r64->ru_nswap;
  102. r->ru_inblock = r64->ru_inblock;
  103. r->ru_oublock = r64->ru_oublock;
  104. r->ru_msgsnd = r64->ru_msgsnd;
  105. r->ru_msgrcv = r64->ru_msgrcv;
  106. r->ru_nsignals = r64->ru_nsignals;
  107. r->ru_nvcsw = r64->ru_nvcsw;
  108. r->ru_nivcsw = r64->ru_nivcsw;
  109. }
  110. /* Prototypes repeated instead of using __typeof because
  111. sys/resource.h is included in C++ tests, and declaring functions
  112. with __typeof and __THROW doesn't work for C++. */
  113. extern int __getpriority (__priority_which_t __which, id_t __who) __THROW;
  114. libc_hidden_proto (__getpriority)
  115. extern int __setpriority (__priority_which_t __which, id_t __who, int __prio)
  116. __THROW;
  117. libc_hidden_proto (__setpriority)
  118. libc_hidden_proto (getrlimit64)
  119. extern __typeof (getrlimit64) __getrlimit64;
  120. libc_hidden_proto (__getrlimit64);
  121. /* Now define the internal interfaces. */
  122. extern int __getrlimit (enum __rlimit_resource __resource,
  123. struct rlimit *__rlimits) __nonnull ((2));
  124. libc_hidden_proto (__getrlimit)
  125. extern int __getrusage (enum __rusage_who __who, struct rusage *__usage)
  126. attribute_hidden;
  127. extern int __setrlimit (enum __rlimit_resource __resource,
  128. const struct rlimit *__rlimits) __nonnull ((2));
  129. libc_hidden_proto (__setrlimit);
  130. #if __TIMESIZE == 64
  131. # define __getrusage64 __getrusage
  132. # define __wait4_time64 __wait4
  133. # define __wait3_time64 __wait3
  134. #else
  135. extern int __getrusage64 (enum __rusage_who who, struct __rusage64 *usage);
  136. libc_hidden_proto (__getrusage64)
  137. extern pid_t __wait4_time64 (pid_t pid, int *stat_loc, int options,
  138. struct __rusage64 *usage);
  139. libc_hidden_proto (__wait4_time64)
  140. extern pid_t __wait3_time64 (int *stat_loc, int options,
  141. struct __rusage64 *usage);
  142. libc_hidden_proto (__wait3_time64)
  143. #endif
  144. #endif
  145. #endif