diff --git a/lib/chibi/time.sld b/lib/chibi/time.sld index 7ee2ee3e..1d64c6e3 100644 --- a/lib/chibi/time.sld +++ b/lib/chibi/time.sld @@ -7,5 +7,11 @@ time-second time-minute time-hour time-day time-month time-year time-day-of-week time-day-of-year time-dst? tm? timeval? timezone?) + (cond-expand + ((or bsd linux) + (export rusage? resource-usage-time resource-usage-system-time + resource-usage-max-rss resource-usage/self + resource-usage/children get-resource-usage)) + (else)) (import (chibi)) (include-shared "time")) diff --git a/lib/chibi/time.stub b/lib/chibi/time.stub index f53e182b..6aa23a33 100644 --- a/lib/chibi/time.stub +++ b/lib/chibi/time.stub @@ -76,3 +76,24 @@ (define-c non-null-string (time->string "asctime_r") (tm (result (array char 64)))) +(cond-expand + ((or bsd linux) + (define-c-struct rusage + predicate: rusage? + ((struct timeval) ru_utime resource-usage-time) + ((struct timeval) ru_stime resource-usage-system-time) + (long ru_maxrss resource-usage-max-rss)) + +;;> Accessors for the \scheme{rusage} struct. +;;/ + + (define-c-const int (resource-usage/self RUSAGE_SELF)) + (define-c-const int (resource-usage/children RUSAGE_CHILDREN)) + +;;> Returns a struct describing the resources used by the current +;;> process. + + (define-c errno (get-resource-usage "getrusage") + ((default RUSAGE_SELF int) (result rusage)))) + (else + ))