The “POSIX” module makes some system calls available from lisp. Not all of these system calls are actually POSIX, so this package has a nickname “OS”. If the package prefix is not specified below, the symbol resides in this package.
This module is present in the base linking set by default.
When this module is present, *FEATURES*
contains the symbol :SYSCALLS.
(POSIX:RESOLVE-HOST-IPADDR
&OPTIONAL host)Returns the HOSTENT structure:
When host is omitted or :DEFAULT, return the data for the
current host. When host is NIL, all the
host database is returned as a list (this would be the contents of the
/etc/hosts file on a UNIX system or
${windir}/system32/etc/hosts on a Win32 system).
This is an interface
to gethostent,
gethostbyname,
and gethostbyaddr.
(OS:SERVICE
&OPTIONAL service-name
protocol)A convenience function for looking up a port given
the service name, such as “WWW” or “FTP”.
It returns the SERVICE structure
(name, list of aliases, port, protocol) for the given
service-name and protocol,
or all services as a LIST if service-name
is missing or NIL.
This is an interface
to getservent,
getservbyname,
and getservbyport.
(POSIX:FILE-STAT
pathname &OPTIONAL link-p)Return the FILE-STAT structure.
pathname can be a STREAM, a PATHNAME, a STRING or a
NUMBER (on a UNIX system, meaning file descriptor).
The first slot of the structure returned is the string or the
number on which stat,
fstat,
or lstat was called.
The other slots are numbers, members of the struct stat:
devinomodenlinkuidgidrdevsizeatimemtimectimeblksizeblocksAll slots are read-only.
If the system does not support a particular field (e.g.,
Win32 prior to 2000 does not have hard links), NIL (or the
default, like 1 for the number of hard links for old Win32) is
returned.
Normally, one would expect (POSIX:FILE-STAT
"foo") and (POSIX:FILE-STAT ( to
return “similar” objects (OPEN "foo"))OPENing a file changes its
access time though). This is not the case on Win32,
where stat
works but fstat does not.
Specifically, fstat requires
an int argument of an unknown nature,
and it is not clear how do deduce it from the Win32 file handle.
Therefore, instead of always failing on open FILE-STREAM arguments,
this function calls
GetFileInformationByHandle and
fills the FILE-STAT return value based on that.
(POSIX:SET-FILE-STAT pathname
&KEY :ATIME :MTIME :MODE :UID :GID)chmod,
chown,
and utime.
(POSIX:STAT-VFS
pathname)Return a STAT-VFS structure.
pathname can be a STREAM, a PATHNAME, a STRING or a
NUMBER (on a UNIX system, meaning file descriptor).
The first slot of the structure returned is the string
or the number on which statvfs or
fstatvfs was called.
The other slots are members of the struct statvfs:
bsizefrsizeblocksfrsize.bfreebavailfilesffreefavailfsidflag:READ-ONLY.
namemaxvol-namefs-typeAll slots are read-only.
(OS:FILE-INFO
pathname &OPTIONAL all)Return the FILE-INFO structure.
pathname should be a pathname designator. The 7 slots are
attributes |
ctime |
atime |
wtime |
size |
name |
name-short |
When pathname is wild, returns just the first match,
unless the second (optional) argument is non-NIL, in which case a
LIST of objects is returned, one for each match.
(POSIX:STREAM-LOCK stream
lock-p &KEY
(:BLOCK T) (:SHARED NIL) (:START 0) (:END NIL))Set or remove a file lock for the (portion of the)
file associated with stream,
depending on lock-p.
When block is NIL, the call is non-blocking,
and when locking fails, it returns NIL.
When shared is non-NIL,
then lock can be shared between several callers.
Several processes can set a shared
(i.e., read) lock, but only one can set
an exclusive (i.e., write,
or non-shared) lock.
Uses fcntl
or LockFileEx.
(POSIX:WITH-STREAM-LOCK (stream
&REST options) &BODY body)stream, execute the body, unlock
the stream. Pass options to POSIX:STREAM-LOCK.
(POSIX:STREAM-OPTIONS
stream command &OPTIONAL value)fcntl,
command can be :FD or :FL.
(POSIX:MKNOD
pathname type mode)mknod.
Use :FIFO to create pipes
and :SOCK to create sockets.
(POSIX:CONVERT-MODE mode)0644)
and symbolic (e.g., (:RUSR :WUSR :RGRP
:ROTH)) file modes.(POSIX:UMASK
mode)umask.
(POSIX:COPY-FILE source destination
&KEY :METHOD :PRESERVE :IF-EXISTS :IF-DOES-NOT-EXIST)This is an interface to
symlink
(when method is :SYMLINK),
link
(when it is :HARDLINK),
and rename
(when it is :RENAME) system calls, as well as,
you guessed it, a generic file copy utility (when method is :COPY).
Both source and destination may be wild, in which
case TRANSLATE-PATHNAME is used.
(POSIX:DUPLICATE-HANDLE
fd1 &OPTIONAL
fd2)dup system calls on
UNIX systems and to DuplicateHandle
system call on Win32.(OS:SHORTCUT-INFO pathname)#P".lnk") file contents in a
SHORTCUT-INFO structure.(OS:MAKE-SHORTCUT pathname &KEY
:WORKING-DIRECTORY :ARGUMENTS :SHOW-COMMAND :ICON :DESCRIPTION
:HOT-KEY :PATH)#P".lnk") file.
(OS:FILE-PROPERTIES
filename set &KEY :INITID &ALLOW-OTHER-KEYS)Wrapper for the Win32
IPropertyStorage functionality.
filenameset:BUILT-IN
or :USER-DEFINED
:INITID
init-idinit-id
specifier valuespecifierthe property specifier: an INTEGER,
KEYWORD, STRING or a LIST of an INTEGER or a
KEYWORD and a STRING.
INTEGERKEYWORDPredefined KEYWORD IDs are
:APPNAME | :CREATE-DTM | :LASTPRINTED | :SUBJECT |
:AUTHOR | :DOC-SECURITY | :LASTSAVE-DTM | :TEMPLATE |
:CHARCOUNT | :EDITTIME | :LOCALE | :THUMBNAIL |
:CODEPAGE | :KEYWORDS | :PAGECOUNT | :TITLE |
:COMMENTS | :LASTAUTHOR | :REVNUMBER | :WORDCOUNT |
STRINGINTEGER|KEYWORD
STRING)
valuethe new value of the property, a suitable Lisp
object, NIL or a LIST of a KEYWORD and the value
itself. If value is NIL, no assignment is done.
:EMPTY and :NULL
correspond to the VT_EMPTY
and VT_NULL data types.
KEYWORD in the LIST specifies the desired type of
the property being set.
Supported types are
:BOOL | :I1 | :LPWSTR | :UI4 |
:BSTR | :I2 | :R4 | :UI8 |
:DATE | :I4 | :R8 | :UINT |
:ERROR | :I8 | :UI1 | |
:FILETIME | :LPSTR | :UI2 |
FILETIMEs are converted to/from the universal time format, while DATEs are not.
Returns the property contents before assignment as multiple values.
(OS:FILE-OWNER
filename)Return the owner of the file.
(POSIX:MKSTEMP filename
&KEY :DIRECTION :ELEMENT-TYPE :EXTERNAL-FORMAT :BUFFERED)Calls mkstemp,
returns a FILE-STREAM.
:DIRECTION should allow output.
When mkstemp is missing,
use tempnam.
On Win32 use GetTempFileName.
(POSIX:MKDTEMP
filename)mkdtemp
(similar to mkstemp but not in POSIX),
returns the namestring of a new empty temporary directory.
(POSIX:SYNC &OPTIONAL
stream)fsync
(FlushFileBuffers on Win32)
on the file descriptor associated with stream,
or sync
when stream is not supplied(POSIX:USER-INFO
&OPTIONAL user)Return the USER-INFO structure (name,
encoded password, UID, GID, full name, home directory, shell).
user should be a STRING
(getpwnam is used) or an INTEGER
(getpwuid is used).
When user is missing or NIL, return all
users (using getpwent).
When user is :DEFAULT, return the information about the current user
(using getlogin).
Platform Dependent: UNIX platform only.
(POSIX:GROUP-INFO
&OPTIONAL group)Return the GROUP-INFO structure (name,
GID, member LIST). group should be a
STRING (getgrnam is used) or an
INTEGER (getgrgid is used).
When group is missing or NIL, return all
groups (using getgrent).
Platform Dependent: UNIX platform only.
(POSIX:UNAME)uname.(POSIX:SYSCONF
&OPTIONAL what)(POSIX:CONFSTR
&OPTIONAL what)what is missing or
NIL), by calling sysconf
and confstr respectively.
(POSIX:PATHCONF
pathname &OPTIONAL what)what is missing or
NIL), by calling fpathconf on
open file streams and pathconf on
all other pathname designators.(POSIX:RLIMIT
&OPTIONAL what)what is specified or the association list of all available
limits (as an RLIMIT structure) when what is
missing or NIL, by calling getrlimit.
(SETF (POSIX:RLIMIT what)
(VALUES cur max))(SETF (POSIX:RLIMIT what) rlimit)(SETF (POSIX:RLIMIT) rlimit-alist)Set the limits using
setrlimit.
cur
and max are numbers
(or NIL for RLIM_INFINITY).rlimit
is an RLIMIT structure.rlimit-alist is an association list, as returned by
(POSIX:RLIMIT).(POSIX:USAGE)getrusage.
(POSIX:BOGOMIPS)(POSIX:LOADAVG &OPTIONAL
percentp)getloadavg.
If the argument is specified and non-NIL, the values are returned
as integer percentiles.(OS:SYSTEM-INFO)(OS:VERSION)(OS:MEMORY-STATUS)(OS:PHYSICAL-MEMORY)Return 2 values: total and available physical memory.
We implement access to
( |
( |
( |
( |
( |
( |
( |
( |
( |
( |
which compute the error functions, Bessel functions and Gamma.
These functions are required by the POSIX standard and should
be declared in <math.h>.
Please note that these functions do not provide
lisp-style error handling and precision, and do all the computations
at the DOUBLE-FLOAT level.
(:
Find the first bit set.
Like POSIX:FFS n)ffs, but implemented in Lisp and
supports BIGNUMs.
(POSIX:OPENLOG ident &KEY
:PID :CONS :NDELAY :ODELAY :NOWAIT :FACILITY)openlog
(POSIX:SETLOGMASK
maskpri)setlogmask.
(POSIX:SYSLOG severity facility
format-string &REST arguments)Calls syslog on
(.APPLY FORMAT NIL format-string arguments)
No % conversion is performed,
you must do all formatting in Lisp.
(POSIX:CLOSELOG)closelog.
(OS:PROCESS-ID)getpid,
on Win32 calls GetCurrentProcessId)
(OS:PRIORITY pid
&OPTIONAL what)(SETF (OS:PRIORITY pid &OPTIONAL what)
priority)Return or set the process priority, platform-dependent
INTEGER or platform-independent SYMBOL, one of
:REALTIME | :NORMAL | :IDLE |
:HIGH | :BELOW-NORMAL | |
:ABOVE-NORMAL | :LOW |
On UNIX calls getpriority
and setpriority, on
Win32 calls GetPriorityClass and
SetPriorityClass.
(POSIX:KILL pid signal)kill.
(POSIX:GETPPID)getppid.
(POSIX:GETPGRP)getpgrp.
(POSIX:SETPGRP)setpgrp;
on non-POSIX systems where it requires 2 arguments (legacy
BSD-style), it is called as setpgrp(0,0).
(POSIX:GETSID pid)getsid.
(POSIX:SETSID)setsid.
(POSIX:GETPGID pid)(SETF (POSIX:GETPGID
pid) pgid)getpgid and
setpgid.(POSIX:SETREUID
ruid euid)setreuid.
(POSIX:SETREGID
rgid egid)setregid.
(POSIX:GETUID)(SETF (POSIX:GETUID) uid)getuid and
setuid.(POSIX:GETGID)(SETF (POSIX:GETGID) gid)getgid and
setgid.(POSIX:GETEUID)(SETF (POSIX:GETEUID) uid)geteuid and
seteuid.(POSIX:GETEGID)(SETF (POSIX:GETEGID) gid)getegid and
setegid.(POSIX:GETGROUPS)(SETF (POSIX:GETGROUPS) list)getgroups and
setgroups.
(POSIX:ENDUTXENT)endutxent.
(POSIX:GETUTXENT
&OPTIONAL utmpx)getutxent,
returns a STRUCTURE-OBJECT of
type POSIX:UTMPX, which can be passed to subsequent calls to
this function and re-used.(POSIX:GETUTXID id)getutxid,
the argument is filled and returned.(POSIX:GETUTXLINE line)getutxline,
the argument is filled and returned.(POSIX:PUTUTXLINE
utmpx)pututxline,
the argument is filled and returned.(POSIX:SETUTXENT)setutxent.
(OS:STRING-TIME
format-string &OPTIONAL object timezone)
object is a STRING, is is
parsed according to format-string by strptime.
INTEGER, it
is formatted according to format-string by
strftime.
object defaults to (GET-UNIVERSAL-TIME).
(
When running under the X Window System, you can create a bidirectional POSIX:MAKE-XTERM-IO-STREAM &KEY title)STREAM, which uses a new
dedicated xterm, using the function
POSIX:MAKE-XTERM-IO-STREAM:
(SETQ*ERROR-OUTPUT*(SETQ*DEBUG-IO*(POSIX:MAKE-XTERM-IO-STREAM:title "clisp errors and debug")))
Platform Dependent: UNIX platform only.
We define the type FFI:file = FFI:FOREIGN-POINTER and
the following functions:
( |
( |
( |
( |
( |
( |
( |
( |
call their namesakes defined in <stdio.h>.
Functions OS:FOPEN,
OS:FDOPEN, OS:FCLOSE,
OS:FFLUSH, OS:FILENO may
SIGNALs an ERROR.
Return values
OS:FOPENOS:FDOPENFFI:FOREIGN-POINTER
OS:FCLOSEOS:FFLUSHOS:CLEARERROS:FEOFOS:FERRORBOOLEANOS:FILENOINTEGER (file descriptor)These are not for i/o, but merely for for “FFI”
modules which interface to functions which use the
C FILE* pointers. E.g., postgresql has a
function PQtrace
which expects a FILE* argument.
You can use OS:FOPEN
and OS:FCLOSE for that.
These are only present if “FFI” is present.
| These notes document CLISP version 2.45 | Last modified: 2008-05-14 |