(guile.info.gz) Conventions
Info Catalog
(guile.info.gz) POSIX
(guile.info.gz) Ports and File Descriptors
38.1 POSIX Interface Conventions
================================
These interfaces provide access to operating system facilities. They
provide a simple wrapping around the underlying C interfaces to make
usage from Scheme more convenient. They are also used to implement the
Guile port of The Scheme shell (scsh).
Generally there is a single procedure for each corresponding Unix
facility. There are some exceptions, such as procedures implemented for
speed and convenience in Scheme with no primitive Unix equivalent,
e.g., `copy-file'.
The interfaces are intended as far as possible to be portable across
different versions of Unix. In some cases procedures which can't be
implemented on particular systems may become no-ops, or perform limited
actions. In other cases they may throw errors.
General naming conventions are as follows:
* The Scheme name is often identical to the name of the underlying
Unix facility.
* Underscores in Unix procedure names are converted to hyphens.
* Procedures which destructively modify Scheme data have exclamation
marks appended, e.g., `recv!'.
* Predicates (returning only `#t' or `#f') have question marks
appended, e.g., `access?'.
* Some names are changed to avoid conflict with dissimilar interfaces
defined by scsh, e.g., `primitive-fork'.
* Unix preprocessor names such as `EPERM' or `R_OK' are converted to
Scheme variables of the same name (underscores are not replaced
with hyphens).
Unexpected conditions are generally handled by raising exceptions.
There are a few procedures which return a special value if they don't
succeed, e.g., `getenv' returns `#f' if it the requested string is not
found in the environment. These cases are noted in the documentation.
For ways to deal with exceptions, Exceptions.
Errors which the C-library would report by returning a NULL pointer
or through some other means are reported by raising a `system-error'
exception. The value of the Unix `errno' variable is available in the
data passed by the exception.
It can be extracted with the function `system-error-errno':
(catch
'system-error
(lambda ()
(mkdir "/this-ought-to-fail-if-I'm-not-root"))
(lambda stuff
(let ((errno (system-error-errno stuff)))
(cond
((= errno EACCES)
(display "You're not allowed to do that."))
((= errno EEXIST)
(display "Already exists."))
(#t
(display (strerror errno))))
(newline))))
Info Catalog
(guile.info.gz) POSIX
(guile.info.gz) Ports and File Descriptors
automatically generated byinfo2html