gethostname.lisp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. ;;;; -*- Mode: lisp; indent-tabs-mode: nil -*-
  2. ;;;
  3. ;;; gethostname.lisp --- A simple CFFI example.
  4. ;;;
  5. ;;; Copyright (C) 2005-2006, James Bielman <jamesjb@jamesjb.com>
  6. ;;;
  7. ;;; Permission is hereby granted, free of charge, to any person
  8. ;;; obtaining a copy of this software and associated documentation
  9. ;;; files (the "Software"), to deal in the Software without
  10. ;;; restriction, including without limitation the rights to use, copy,
  11. ;;; modify, merge, publish, distribute, sublicense, and/or sell copies
  12. ;;; of the Software, and to permit persons to whom the Software is
  13. ;;; furnished to do so, subject to the following conditions:
  14. ;;;
  15. ;;; The above copyright notice and this permission notice shall be
  16. ;;; included in all copies or substantial portions of the Software.
  17. ;;;
  18. ;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  19. ;;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20. ;;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  21. ;;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  22. ;;; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  23. ;;; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  24. ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  25. ;;; DEALINGS IN THE SOFTWARE.
  26. ;;;
  27. ;;;# CFFI Example: gethostname binding
  28. ;;;
  29. ;;; This is a very simple CFFI example that illustrates calling a C
  30. ;;; function that fills in a user-supplied string buffer.
  31. (defpackage #:cffi-example-gethostname
  32. (:use #:common-lisp #:cffi)
  33. (:export #:gethostname))
  34. (in-package #:cffi-example-gethostname)
  35. ;;; Define the Lisp function %GETHOSTNAME to call the C 'gethostname'
  36. ;;; function, which will fill BUF with up to BUFSIZE characters of the
  37. ;;; system's hostname.
  38. (defcfun ("gethostname" %gethostname) :int
  39. (buf :pointer)
  40. (bufsize :int))
  41. ;;; Define a Lispy interface to 'gethostname'. The utility macro
  42. ;;; WITH-FOREIGN-POINTER-AS-STRING is used to allocate a temporary
  43. ;;; buffer and return it as a Lisp string.
  44. (defun gethostname ()
  45. (with-foreign-pointer-as-string ((buf bufsize) 255)
  46. (%gethostname buf bufsize)))