#lang scheme/base ;; load average through the foreign interface. ;; Probably works only on linux, bsd, and Solaris systems. ;; Inspired by reading ;; http://blog.viridian-project.de/2008/01/24/getting-started-with-cffi/ (require scheme/foreign (only-in (lib "1.ss" "srfi") take) (prefix-in c: scheme/contract)) (unsafe!) (c:provide/contract [getloadavg (c:-> (c:listof number?))]) (define _getloadavg (get-ffi-obj "getloadavg" #f (_fun _cvector _int -> _int))) ;; getloadavg: -> (listof number?) ;; Returns the load average over the last 1, 5, and 15 minutes. (define (getloadavg) (let* ([length 3] [buffer (make-cvector _double length)] [number-of-samples (_getloadavg buffer length)]) (take (cvector->list buffer) number-of-samples)))