Node:Conventions, Next:Ports and File Descriptors, Up:POSIX
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,
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:
#f) have question marks appended, e.g.,
R_OKare 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
#f if it the requested
string is not found in the environment. These cases are noted in
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
exception. The value of the Unix
errno variable is available
in the data passed by the exception.
It can be extracted with the function
(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))))