Paste number 54746: Accessing loadavg with CFFI

Index of paste annotations: 1

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:
Raw Source | XML | Display As
(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:
Raw Source | Display As
(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)))))

Colorize as:
Show Line Numbers
Index of paste annotations: 1

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.