| Paste number 54746: | Accessing loadavg with CFFI |
| Pasted by: | Leslie |
| When: | 2 years, 6 months ago |
| Share: | Tweet this! | http://paste.lisp.org/+168Q |
| Channel: | None |
| Paste contents: |
(asdf:oos 'asdf:load-op 'cffi)
(defpackage :cffi-user
(:use :common-lisp :cffi))
(in-package :cffi-user)
(define-foreign-library libc
(:unix (:or "libc.so.6" "libc.so.5" "libc.so"))
(t (:default "libc.so")))
(use-foreign-library libc)
(defcfun "getloadavg" :int (loadavg :pointer) (nelem :int))
(defun load-averages ()
(let ((loadavg (foreign-alloc :double :count 3)))
(getloadavg loadavg 3)
(prog1
(format nil "~{~,2F~^ ~}" (loop for i from 0 to 2
collect (mem-aref loadavg :double i)))
(foreign-free loadavg))))
; basic test:
(format t (load-averages))Annotations for this paste:
| Annotation number 1: | simpler allocation |
| Pasted by: | attila |
| When: | 2 years, 6 months ago |
| Share: | Tweet this! | http://paste.lisp.org/+168Q/1 |
| Paste contents: |
(defun load-averages ()
(with-foreign-object (loadavg :double 3)
(getloadavg loadavg 3)
(values-list (loop for i from 0 to 2
collect (mem-aref loadavg :double i)))))