Implement R7RS 'syntax-error'.
[bpt/guile.git] / doc / ref / posix.texi
CommitLineData
2da09c3f
MV
1@c -*-texinfo-*-
2@c This is part of the GNU Guile Reference Manual.
1ba05158 3@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2006, 2007,
a796d0a9 4@c 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
2da09c3f
MV
5@c See the file guile.texi for copying conditions.
6
a0e07ba4 7@node POSIX
3229f68b 8@section @acronym{POSIX} System Calls and Networking
f3dfb8ac 9@cindex POSIX
a0e07ba4
NJ
10
11@menu
12* Conventions:: Conventions employed by the POSIX interface.
13* Ports and File Descriptors:: Scheme ``ports'' and Unix file descriptors
7381c1de 14 have different representations.
a0e07ba4
NJ
15* File System:: stat, chown, chmod, etc.
16* User Information:: Retrieving a user's GECOS (/etc/passwd) entry.
17* Time:: gettimeofday, localtime, strftime, etc.
18* Runtime Environment:: Accessing and modifying Guile's environment.
19* Processes:: getuid, getpid, etc.
20* Signals:: sigaction, kill, pause, alarm, setitimer, etc.
21* Terminals and Ptys:: ttyname, tcsetpgrp, etc.
22* Pipes:: Communicating data between processes.
23* Networking:: gethostbyaddr, getnetent, socket, bind, listen.
24* System Identification:: Obtaining information about the system.
25* Locales:: setlocale, etc.
5f378d17 26* Encryption::
a0e07ba4
NJ
27@end menu
28
29@node Conventions
3229f68b 30@subsection @acronym{POSIX} Interface Conventions
a0e07ba4
NJ
31
32These interfaces provide access to operating system facilities.
33They provide a simple wrapping around the underlying C interfaces
34to make usage from Scheme more convenient. They are also used
7403e409 35to implement the Guile port of scsh (@pxref{The Scheme shell (scsh)}).
a0e07ba4
NJ
36
37Generally there is a single procedure for each corresponding Unix
38facility. There are some exceptions, such as procedures implemented for
39speed and convenience in Scheme with no primitive Unix equivalent,
7403e409 40e.g.@: @code{copy-file}.
a0e07ba4
NJ
41
42The interfaces are intended as far as possible to be portable across
43different versions of Unix. In some cases procedures which can't be
44implemented on particular systems may become no-ops, or perform limited
45actions. In other cases they may throw errors.
46
47General naming conventions are as follows:
48
49@itemize @bullet
50@item
51The Scheme name is often identical to the name of the underlying Unix
52facility.
53@item
54Underscores in Unix procedure names are converted to hyphens.
55@item
85a9b4ed 56Procedures which destructively modify Scheme data have exclamation
a0e07ba4
NJ
57marks appended, e.g., @code{recv!}.
58@item
59Predicates (returning only @code{#t} or @code{#f}) have question marks
60appended, e.g., @code{access?}.
61@item
62Some names are changed to avoid conflict with dissimilar interfaces
63defined by scsh, e.g., @code{primitive-fork}.
64@item
65Unix preprocessor names such as @code{EPERM} or @code{R_OK} are converted
66to Scheme variables of the same name (underscores are not replaced
67with hyphens).
68@end itemize
69
70Unexpected conditions are generally handled by raising exceptions.
71There are a few procedures which return a special value if they don't
72succeed, e.g., @code{getenv} returns @code{#f} if it the requested
73string is not found in the environment. These cases are noted in
74the documentation.
75
7403e409 76For ways to deal with exceptions, see @ref{Exceptions}.
a0e07ba4 77
f3dfb8ac 78@cindex @code{errno}
7403e409 79Errors which the C library would report by returning a null pointer or
a0e07ba4 80through some other means are reported by raising a @code{system-error}
5982a8e0
KR
81exception with @code{scm-error} (@pxref{Error Reporting}). The
82@var{data} parameter is a list containing the Unix @code{errno} value
83(an integer). For example,
a0e07ba4 84
5982a8e0
KR
85@example
86(define (my-handler key func fmt fmtargs data)
87 (display key) (newline)
88 (display func) (newline)
89 (apply format #t fmt fmtargs) (newline)
90 (display data) (newline))
91
92(catch 'system-error
93 (lambda () (dup2 -123 -456))
94 my-handler)
95
96@print{}
97system-error
98dup2
99Bad file descriptor
100(9)
101@end example
102
103
104@sp 1
105@defun system-error-errno arglist
f3dfb8ac 106@cindex @code{errno}
5982a8e0
KR
107Return the @code{errno} value from a list which is the arguments to an
108exception handler. If the exception is not a @code{system-error},
109then the return is @code{#f}. For example,
a0e07ba4
NJ
110
111@example
112(catch
113 'system-error
114 (lambda ()
115 (mkdir "/this-ought-to-fail-if-I'm-not-root"))
116 (lambda stuff
117 (let ((errno (system-error-errno stuff)))
118 (cond
119 ((= errno EACCES)
120 (display "You're not allowed to do that."))
121 ((= errno EEXIST)
122 (display "Already exists."))
123 (#t
124 (display (strerror errno))))
125 (newline))))
126@end example
5982a8e0
KR
127@end defun
128
a0e07ba4
NJ
129
130@node Ports and File Descriptors
3229f68b 131@subsection Ports and File Descriptors
f3dfb8ac 132@cindex file descriptor
a0e07ba4
NJ
133
134Conventions generally follow those of scsh, @ref{The Scheme shell (scsh)}.
135
136File ports are implemented using low-level operating system I/O
7403e409
NJ
137facilities, with optional buffering to improve efficiency; see
138@ref{File Ports}.
a0e07ba4
NJ
139
140Note that some procedures (e.g., @code{recv!}) will accept ports as
141arguments, but will actually operate directly on the file descriptor
142underlying the port. Any port buffering is ignored, including the
143buffer which implements @code{peek-char} and @code{unread-char}.
144
145The @code{force-output} and @code{drain-input} procedures can be used
146to clear the buffers.
147
148Each open file port has an associated operating system file descriptor.
149File descriptors are generally not useful in Scheme programs; however
150they may be needed when interfacing with foreign code and the Unix
151environment.
152
153A file descriptor can be extracted from a port and a new port can be
154created from a file descriptor. However a file descriptor is just an
85a9b4ed 155integer and the garbage collector doesn't recognize it as a reference
a0e07ba4
NJ
156to the port. If all other references to the port were dropped, then
157it's likely that the garbage collector would free the port, with the
158side-effect of closing the file descriptor prematurely.
159
160To assist the programmer in avoiding this problem, each port has an
7403e409 161associated @dfn{revealed count} which can be used to keep track of how many
a0e07ba4
NJ
162times the underlying file descriptor has been stored in other places.
163If a port's revealed count is greater than zero, the file descriptor
85a9b4ed 164will not be closed when the port is garbage collected. A programmer
a0e07ba4
NJ
165can therefore ensure that the revealed count will be greater than
166zero if the file descriptor is needed elsewhere.
167
7403e409 168For the simple case where a file descriptor is ``imported'' once to become
a0e07ba4
NJ
169a port, it does not matter if the file descriptor is closed when the
170port is garbage collected. There is no need to maintain a revealed
7403e409 171count. Likewise when ``exporting'' a file descriptor to the external
a0e07ba4
NJ
172environment, setting the revealed count is not required provided the
173port is kept open (i.e., is pointed to by a live Scheme binding) while
174the file descriptor is in use.
175
7403e409
NJ
176To correspond with traditional Unix behaviour, three file descriptors
177(0, 1, and 2) are automatically imported when a program starts up and
178assigned to the initial values of the current/standard input, output,
179and error ports, respectively. The revealed count for each is
180initially set to one, so that dropping references to one of these
181ports will not result in its garbage collection: it could be retrieved
182with @code{fdopen} or @code{fdes->ports}.
a0e07ba4 183
8f85c0c6
NJ
184@deffn {Scheme Procedure} port-revealed port
185@deffnx {C Function} scm_port_revealed (port)
a0e07ba4
NJ
186Return the revealed count for @var{port}.
187@end deffn
188
8f85c0c6
NJ
189@deffn {Scheme Procedure} set-port-revealed! port rcount
190@deffnx {C Function} scm_set_port_revealed_x (port, rcount)
7403e409 191Sets the revealed count for a @var{port} to @var{rcount}.
a0e07ba4
NJ
192The return value is unspecified.
193@end deffn
194
8f85c0c6
NJ
195@deffn {Scheme Procedure} fileno port
196@deffnx {C Function} scm_fileno (port)
a0e07ba4
NJ
197Return the integer file descriptor underlying @var{port}. Does
198not change its revealed count.
199@end deffn
200
8f85c0c6 201@deffn {Scheme Procedure} port->fdes port
a0e07ba4
NJ
202Returns the integer file descriptor underlying @var{port}. As a
203side effect the revealed count of @var{port} is incremented.
204@end deffn
205
8f85c0c6
NJ
206@deffn {Scheme Procedure} fdopen fdes modes
207@deffnx {C Function} scm_fdopen (fdes, modes)
7403e409
NJ
208Return a new port based on the file descriptor @var{fdes}. Modes are
209given by the string @var{modes}. The revealed count of the port is
210initialized to zero. The @var{modes} string is the same as that
211accepted by @code{open-file} (@pxref{File Ports, open-file}).
a0e07ba4
NJ
212@end deffn
213
64de6db5
BT
214@deffn {Scheme Procedure} fdes->ports fdes
215@deffnx {C Function} scm_fdes_to_ports (fdes)
a0e07ba4
NJ
216Return a list of existing ports which have @var{fdes} as an
217underlying file descriptor, without changing their revealed
218counts.
219@end deffn
220
8f85c0c6 221@deffn {Scheme Procedure} fdes->inport fdes
a0e07ba4
NJ
222Returns an existing input port which has @var{fdes} as its underlying file
223descriptor, if one exists, and increments its revealed count.
224Otherwise, returns a new input port with a revealed count of 1.
225@end deffn
226
8f85c0c6 227@deffn {Scheme Procedure} fdes->outport fdes
a0e07ba4
NJ
228Returns an existing output port which has @var{fdes} as its underlying file
229descriptor, if one exists, and increments its revealed count.
230Otherwise, returns a new output port with a revealed count of 1.
231@end deffn
232
64de6db5
BT
233@deffn {Scheme Procedure} primitive-move->fdes port fdes
234@deffnx {C Function} scm_primitive_move_to_fdes (port, fdes)
a0e07ba4
NJ
235Moves the underlying file descriptor for @var{port} to the integer
236value @var{fdes} without changing the revealed count of @var{port}.
237Any other ports already using this descriptor will be automatically
238shifted to new descriptors and their revealed counts reset to zero.
239The return value is @code{#f} if the file descriptor already had the
240required value or @code{#t} if it was moved.
241@end deffn
242
8f85c0c6 243@deffn {Scheme Procedure} move->fdes port fdes
a0e07ba4
NJ
244Moves the underlying file descriptor for @var{port} to the integer
245value @var{fdes} and sets its revealed count to one. Any other ports
246already using this descriptor will be automatically
247shifted to new descriptors and their revealed counts reset to zero.
248The return value is unspecified.
249@end deffn
250
8f85c0c6 251@deffn {Scheme Procedure} release-port-handle port
a0e07ba4
NJ
252Decrements the revealed count for a port.
253@end deffn
254
64de6db5
BT
255@deffn {Scheme Procedure} fsync port_or_fd
256@deffnx {C Function} scm_fsync (port_or_fd)
a0e07ba4 257Copies any unwritten data for the specified output file descriptor to disk.
64de6db5 258If @var{port_or_fd} is a port, its buffer is flushed before the underlying
a0e07ba4
NJ
259file descriptor is fsync'd.
260The return value is unspecified.
261@end deffn
262
8f85c0c6
NJ
263@deffn {Scheme Procedure} open path flags [mode]
264@deffnx {C Function} scm_open (path, flags, mode)
a0e07ba4
NJ
265Open the file named by @var{path} for reading and/or writing.
266@var{flags} is an integer specifying how the file should be opened.
7403e409
NJ
267@var{mode} is an integer specifying the permission bits of the file,
268if it needs to be created, before the umask (@pxref{Processes}) is
269applied. The default is 666 (Unix itself has no default).
a0e07ba4
NJ
270
271@var{flags} can be constructed by combining variables using @code{logior}.
272Basic flags are:
273
274@defvar O_RDONLY
275Open the file read-only.
276@end defvar
277@defvar O_WRONLY
278Open the file write-only.
279@end defvar
280@defvar O_RDWR
281Open the file read/write.
282@end defvar
283@defvar O_APPEND
284Append to the file instead of truncating.
285@end defvar
286@defvar O_CREAT
287Create the file if it does not already exist.
288@end defvar
289
7403e409 290@xref{File Status Flags,,,libc,The GNU C Library Reference Manual},
a0e07ba4
NJ
291for additional flags.
292@end deffn
293
8f85c0c6
NJ
294@deffn {Scheme Procedure} open-fdes path flags [mode]
295@deffnx {C Function} scm_open_fdes (path, flags, mode)
a0e07ba4
NJ
296Similar to @code{open} but return a file descriptor instead of
297a port.
298@end deffn
299
8f85c0c6
NJ
300@deffn {Scheme Procedure} close fd_or_port
301@deffnx {C Function} scm_close (fd_or_port)
7403e409 302Similar to @code{close-port} (@pxref{Closing, close-port}),
8f85c0c6
NJ
303but also works on file descriptors. A side
304effect of closing a file descriptor is that any ports using that file
305descriptor are moved to a different file descriptor and have
306their revealed counts set to zero.
a0e07ba4
NJ
307@end deffn
308
8f85c0c6
NJ
309@deffn {Scheme Procedure} close-fdes fd
310@deffnx {C Function} scm_close_fdes (fd)
7403e409
NJ
311A simple wrapper for the @code{close} system call. Close file
312descriptor @var{fd}, which must be an integer. Unlike @code{close},
313the file descriptor will be closed even if a port is using it. The
314return value is unspecified.
a0e07ba4
NJ
315@end deffn
316
8f85c0c6 317@deffn {Scheme Procedure} unread-char char [port]
c16da59f 318@deffnx {C Function} scm_unread_char (char, port)
7403e409
NJ
319Place @var{char} in @var{port} so that it will be read by the next
320read operation on that port. If called multiple times, the unread
321characters will be read again in ``last-in, first-out'' order (i.e.@:
322a stack). If @var{port} is not supplied, the current input port is
323used.
a0e07ba4
NJ
324@end deffn
325
8f85c0c6 326@deffn {Scheme Procedure} unread-string str port
a0e07ba4
NJ
327Place the string @var{str} in @var{port} so that its characters will be
328read in subsequent read operations. If called multiple times, the
329unread characters will be read again in last-in first-out order. If
330@var{port} is not supplied, the current-input-port is used.
331@end deffn
332
8f85c0c6
NJ
333@deffn {Scheme Procedure} pipe
334@deffnx {C Function} scm_pipe ()
f3dfb8ac 335@cindex pipe
a0e07ba4 336Return a newly created pipe: a pair of ports which are linked
7403e409
NJ
337together on the local machine. The @acronym{CAR} is the input
338port and the @acronym{CDR} is the output port. Data written (and
a0e07ba4
NJ
339flushed) to the output port can be read from the input port.
340Pipes are commonly used for communication with a newly forked
341child process. The need to flush the output port can be
342avoided by making it unbuffered using @code{setvbuf}.
343
c6ba64cd
KR
344@defvar PIPE_BUF
345A write of up to @code{PIPE_BUF} many bytes to a pipe is atomic,
346meaning when done it goes into the pipe instantaneously and as a
347contiguous block (@pxref{Pipe Atomicity,, Atomicity of Pipe I/O, libc,
348The GNU C Library Reference Manual}).
349@end defvar
350
351Note that the output port is likely to block if too much data has been
352written but not yet read from the input port. Typically the capacity
353is @code{PIPE_BUF} bytes.
a0e07ba4
NJ
354@end deffn
355
356The next group of procedures perform a @code{dup2}
357system call, if @var{newfd} (an
358integer) is supplied, otherwise a @code{dup}. The file descriptor to be
359duplicated can be supplied as an integer or contained in a port. The
360type of value returned varies depending on which procedure is used.
361
362All procedures also have the side effect when performing @code{dup2} that any
363ports using @var{newfd} are moved to a different file descriptor and have
364their revealed counts set to zero.
365
8f85c0c6
NJ
366@deffn {Scheme Procedure} dup->fdes fd_or_port [fd]
367@deffnx {C Function} scm_dup_to_fdes (fd_or_port, fd)
a0e07ba4
NJ
368Return a new integer file descriptor referring to the open file
369designated by @var{fd_or_port}, which must be either an open
370file port or a file descriptor.
371@end deffn
372
8f85c0c6 373@deffn {Scheme Procedure} dup->inport port/fd [newfd]
a0e07ba4
NJ
374Returns a new input port using the new file descriptor.
375@end deffn
376
8f85c0c6 377@deffn {Scheme Procedure} dup->outport port/fd [newfd]
a0e07ba4
NJ
378Returns a new output port using the new file descriptor.
379@end deffn
380
8f85c0c6 381@deffn {Scheme Procedure} dup port/fd [newfd]
a0e07ba4
NJ
382Returns a new port if @var{port/fd} is a port, with the same mode as the
383supplied port, otherwise returns an integer file descriptor.
384@end deffn
385
8f85c0c6 386@deffn {Scheme Procedure} dup->port port/fd mode [newfd]
a0e07ba4
NJ
387Returns a new port using the new file descriptor. @var{mode} supplies a
388mode string for the port (@pxref{File Ports, open-file}).
389@end deffn
390
8f85c0c6 391@deffn {Scheme Procedure} duplicate-port port modes
a0e07ba4
NJ
392Returns a new port which is opened on a duplicate of the file
393descriptor underlying @var{port}, with mode string @var{modes}
394as for @ref{File Ports, open-file}. The two ports
395will share a file position and file status flags.
396
397Unexpected behaviour can result if both ports are subsequently used
398and the original and/or duplicate ports are buffered.
399The mode string can include @code{0} to obtain an unbuffered duplicate
400port.
401
402This procedure is equivalent to @code{(dup->port @var{port} @var{modes})}.
403@end deffn
404
64de6db5
BT
405@deffn {Scheme Procedure} redirect-port old_port new_port
406@deffnx {C Function} scm_redirect_port (old_port, new_port)
a0e07ba4 407This procedure takes two ports and duplicates the underlying file
64de6db5
BT
408descriptor from @var{old_port} into @var{new_port}. The
409current file descriptor in @var{new_port} will be closed.
a0e07ba4
NJ
410After the redirection the two ports will share a file position
411and file status flags.
412
413The return value is unspecified.
414
415Unexpected behaviour can result if both ports are subsequently used
416and the original and/or duplicate ports are buffered.
417
418This procedure does not have any side effects on other ports or
419revealed counts.
420@end deffn
421
8f85c0c6
NJ
422@deffn {Scheme Procedure} dup2 oldfd newfd
423@deffnx {C Function} scm_dup2 (oldfd, newfd)
a0e07ba4
NJ
424A simple wrapper for the @code{dup2} system call.
425Copies the file descriptor @var{oldfd} to descriptor
426number @var{newfd}, replacing the previous meaning
427of @var{newfd}. Both @var{oldfd} and @var{newfd} must
428be integers.
7403e409 429Unlike for @code{dup->fdes} or @code{primitive-move->fdes}, no attempt
a0e07ba4
NJ
430is made to move away ports which are using @var{newfd}.
431The return value is unspecified.
432@end deffn
433
8f85c0c6 434@deffn {Scheme Procedure} port-mode port
a0e07ba4
NJ
435Return the port modes associated with the open port @var{port}.
436These will not necessarily be identical to the modes used when
7403e409 437the port was opened, since modes such as ``append'' which are
a0e07ba4
NJ
438used only during port creation are not retained.
439@end deffn
440
8f85c0c6 441@deffn {Scheme Procedure} port-for-each proc
c2e15516
MV
442@deffnx {C Function} scm_port_for_each (SCM proc)
443@deffnx {C Function} scm_c_port_for_each (void (*proc)(void *, SCM), void *data)
a0e07ba4 444Apply @var{proc} to each port in the Guile port table
7403e409 445(FIXME: what is the Guile port table?)
a0e07ba4 446in turn. The return value is unspecified. More specifically,
7403e409
NJ
447@var{proc} is applied exactly once to every port that exists in the
448system at the time @code{port-for-each} is invoked. Changes to the
449port table while @code{port-for-each} is running have no effect as far
450as @code{port-for-each} is concerned.
c2e15516
MV
451
452The C function @code{scm_port_for_each} takes a Scheme procedure
453encoded as a @code{SCM} value, while @code{scm_c_port_for_each} takes
454a pointer to a C function and passes along a arbitrary @var{data}
455cookie.
a0e07ba4
NJ
456@end deffn
457
8f85c0c6
NJ
458@deffn {Scheme Procedure} setvbuf port mode [size]
459@deffnx {C Function} scm_setvbuf (port, mode, size)
f3dfb8ac 460@cindex port buffering
a0e07ba4 461Set the buffering mode for @var{port}. @var{mode} can be:
2ce02471
NJ
462
463@defvar _IONBF
a0e07ba4 464non-buffered
2ce02471
NJ
465@end defvar
466@defvar _IOLBF
a0e07ba4 467line buffered
2ce02471
NJ
468@end defvar
469@defvar _IOFBF
a0e07ba4
NJ
470block buffered, using a newly allocated buffer of @var{size} bytes.
471If @var{size} is omitted, a default size will be used.
2ce02471 472@end defvar
a0e07ba4
NJ
473@end deffn
474
23f2b9a3 475@deffn {Scheme Procedure} fcntl port/fd cmd [value]
8f85c0c6 476@deffnx {C Function} scm_fcntl (object, cmd, value)
23f2b9a3
KR
477Apply @var{cmd} on @var{port/fd}, either a port or file descriptor.
478The @var{value} argument is used by the @code{SET} commands described
479below, it's an integer value.
a0e07ba4 480
1b09b607 481Values for @var{cmd} are:
a0e07ba4 482
2ce02471 483@defvar F_DUPFD
1b09b607
KR
484Duplicate the file descriptor, the same as @code{dup->fdes} above
485does.
2ce02471 486@end defvar
1b09b607 487
2ce02471 488@defvar F_GETFD
1b09b607
KR
489@defvarx F_SETFD
490Get or set flags associated with the file descriptor. The only flag
491is the following,
492
493@defvar FD_CLOEXEC
494``Close on exec'', meaning the file descriptor will be closed on an
495@code{exec} call (a successful such call). For example to set that
496flag,
497
498@example
499(fcntl port F_SETFD FD_CLOEXEC)
500@end example
23f2b9a3
KR
501
502Or better, set it but leave any other possible future flags unchanged,
503
504@example
505(fcntl port F_SETFD (logior FD_CLOEXEC
506 (fcntl port F_GETFD)))
507@end example
2ce02471 508@end defvar
2ce02471 509@end defvar
1b09b607 510
2ce02471 511@defvar F_GETFL
1b09b607
KR
512@defvarx F_SETFL
513Get or set flags associated with the open file. These flags are
514@code{O_RDONLY} etc described under @code{open} above.
515
516A common use is to set @code{O_NONBLOCK} on a network socket. The
517following sets that flag, and leaves other flags unchanged.
518
519@example
23f2b9a3
KR
520(fcntl sock F_SETFL (logior O_NONBLOCK
521 (fcntl sock F_GETFL)))
1b09b607 522@end example
2ce02471 523@end defvar
1b09b607 524
2ce02471 525@defvar F_GETOWN
1b09b607
KR
526@defvarx F_SETOWN
527Get or set the process ID of a socket's owner, for @code{SIGIO} signals.
2ce02471 528@end defvar
a0e07ba4
NJ
529@end deffn
530
8f85c0c6
NJ
531@deffn {Scheme Procedure} flock file operation
532@deffnx {C Function} scm_flock (file, operation)
f3dfb8ac 533@cindex file locking
a0e07ba4
NJ
534Apply or remove an advisory lock on an open file.
535@var{operation} specifies the action to be done:
2ce02471
NJ
536
537@defvar LOCK_SH
a0e07ba4
NJ
538Shared lock. More than one process may hold a shared lock
539for a given file at a given time.
2ce02471
NJ
540@end defvar
541@defvar LOCK_EX
a0e07ba4
NJ
542Exclusive lock. Only one process may hold an exclusive lock
543for a given file at a given time.
2ce02471
NJ
544@end defvar
545@defvar LOCK_UN
a0e07ba4 546Unlock the file.
2ce02471
NJ
547@end defvar
548@defvar LOCK_NB
67bcd110
KR
549Don't block when locking. This is combined with one of the other
550operations using @code{logior} (@pxref{Bitwise Operations}). If
551@code{flock} would block an @code{EWOULDBLOCK} error is thrown
552(@pxref{Conventions}).
2ce02471
NJ
553@end defvar
554
a0e07ba4 555The return value is not specified. @var{file} may be an open
85a9b4ed 556file descriptor or an open file descriptor port.
67bcd110
KR
557
558Note that @code{flock} does not lock files across NFS.
a0e07ba4
NJ
559@end deffn
560
8f85c0c6
NJ
561@deffn {Scheme Procedure} select reads writes excepts [secs [usecs]]
562@deffnx {C Function} scm_select (reads, writes, excepts, secs, usecs)
a0e07ba4 563This procedure has a variety of uses: waiting for the ability
85a9b4ed 564to provide input, accept output, or the existence of
a0e07ba4
NJ
565exceptional conditions on a collection of ports or file
566descriptors, or waiting for a timeout to occur.
567It also returns if interrupted by a signal.
568
569@var{reads}, @var{writes} and @var{excepts} can be lists or
570vectors, with each member a port or a file descriptor.
571The value returned is a list of three corresponding
572lists or vectors containing only the members which meet the
573specified requirement. The ability of port buffers to
574provide input or accept output is taken into account.
575Ordering of the input lists or vectors is not preserved.
576
577The optional arguments @var{secs} and @var{usecs} specify the
578timeout. Either @var{secs} can be specified alone, as
579either an integer or a real number, or both @var{secs} and
580@var{usecs} can be specified as integers, in which case
581@var{usecs} is an additional timeout expressed in
582microseconds. If @var{secs} is omitted or is @code{#f} then
583select will wait for as long as it takes for one of the other
584conditions to be satisfied.
585
586The scsh version of @code{select} differs as follows:
587Only vectors are accepted for the first three arguments.
588The @var{usecs} argument is not supported.
589Multiple values are returned instead of a list.
590Duplicates in the input vectors appear only once in output.
591An additional @code{select!} interface is provided.
592@end deffn
593
594@node File System
3229f68b 595@subsection File System
f3dfb8ac 596@cindex file system
a0e07ba4
NJ
597
598These procedures allow querying and setting file system attributes
599(such as owner,
600permissions, sizes and types of files); deleting, copying, renaming and
601linking files; creating and removing directories and querying their
602contents; syncing the file system and creating special files.
603
8f85c0c6
NJ
604@deffn {Scheme Procedure} access? path how
605@deffnx {C Function} scm_access (path, how)
ad1c1f18
KR
606Test accessibility of a file under the real UID and GID of the calling
607process. The return is @code{#t} if @var{path} exists and the
608permissions requested by @var{how} are all allowed, or @code{#f} if
609not.
a0e07ba4 610
ad1c1f18
KR
611@var{how} is an integer which is one of the following values, or a
612bitwise-OR (@code{logior}) of multiple values.
a0e07ba4
NJ
613
614@defvar R_OK
ad1c1f18 615Test for read permission.
a0e07ba4
NJ
616@end defvar
617@defvar W_OK
ad1c1f18 618Test for write permission.
a0e07ba4
NJ
619@end defvar
620@defvar X_OK
ad1c1f18 621Test for execute permission.
a0e07ba4
NJ
622@end defvar
623@defvar F_OK
ad1c1f18
KR
624Test for existence of the file. This is implied by each of the other
625tests, so there's no need to combine it with them.
a0e07ba4 626@end defvar
ad1c1f18
KR
627
628It's important to note that @code{access?} does not simply indicate
629what will happen on attempting to read or write a file. In normal
630circumstances it does, but in a set-UID or set-GID program it doesn't
631because @code{access?} tests the real ID, whereas an open or execute
632attempt uses the effective ID.
633
634A program which will never run set-UID/GID can ignore the difference
635between real and effective IDs, but for maximum generality, especially
1cd9ea69
KR
636in library functions, it's best not to use @code{access?} to predict
637the result of an open or execute, instead simply attempt that and
638catch any exception.
ad1c1f18
KR
639
640The main use for @code{access?} is to let a set-UID/GID program
641determine what the invoking user would have been allowed to do,
642without the greater (or perhaps lesser) privileges afforded by the
643effective ID. For more on this, see @ref{Testing File Access,,, libc,
644The GNU C Library Reference Manual}.
a0e07ba4
NJ
645@end deffn
646
647@findex fstat
8f85c0c6
NJ
648@deffn {Scheme Procedure} stat object
649@deffnx {C Function} scm_stat (object)
a0e07ba4 650Return an object containing various information about the file
64de6db5 651determined by @var{object}. @var{object} can be a string containing
a0e07ba4
NJ
652a file name or a port or integer file descriptor which is open
653on a file (in which case @code{fstat} is used as the underlying
654system call).
655
656The object returned by @code{stat} can be passed as a single
657parameter to the following procedures, all of which return
658integers:
659
2ce02471 660@deffn {Scheme Procedure} stat:dev st
5c3917e7 661The device number containing the file.
2ce02471
NJ
662@end deffn
663@deffn {Scheme Procedure} stat:ino st
a0e07ba4
NJ
664The file serial number, which distinguishes this file from all
665other files on the same device.
2ce02471
NJ
666@end deffn
667@deffn {Scheme Procedure} stat:mode st
5c3917e7
KR
668The mode of the file. This is an integer which incorporates file type
669information and file permission bits. See also @code{stat:type} and
a0e07ba4 670@code{stat:perms} below.
2ce02471
NJ
671@end deffn
672@deffn {Scheme Procedure} stat:nlink st
a0e07ba4 673The number of hard links to the file.
2ce02471
NJ
674@end deffn
675@deffn {Scheme Procedure} stat:uid st
a0e07ba4 676The user ID of the file's owner.
2ce02471
NJ
677@end deffn
678@deffn {Scheme Procedure} stat:gid st
a0e07ba4 679The group ID of the file.
2ce02471
NJ
680@end deffn
681@deffn {Scheme Procedure} stat:rdev st
f5f7888d
KR
682Device ID; this entry is defined only for character or block special
683files. On some systems this field is not available at all, in which
684case @code{stat:rdev} returns @code{#f}.
2ce02471
NJ
685@end deffn
686@deffn {Scheme Procedure} stat:size st
a0e07ba4 687The size of a regular file in bytes.
2ce02471
NJ
688@end deffn
689@deffn {Scheme Procedure} stat:atime st
06bfe276 690The last access time for the file, in seconds.
2ce02471
NJ
691@end deffn
692@deffn {Scheme Procedure} stat:mtime st
06bfe276 693The last modification time for the file, in seconds.
2ce02471
NJ
694@end deffn
695@deffn {Scheme Procedure} stat:ctime st
06bfe276
AW
696The last modification time for the attributes of the file, in seconds.
697@end deffn
698@deffn {Scheme Procedure} stat:atimensec st
699@deffnx {Scheme Procedure} stat:mtimensec st
700@deffnx {Scheme Procedure} stat:ctimensec st
701The fractional part of a file's access, modification, or attribute modification
702time, in nanoseconds. Nanosecond timestamps are only available on some operating
477e4219 703systems and file systems. If Guile cannot retrieve nanosecond-level timestamps
06bfe276 704for a file, these fields will be set to 0.
2ce02471
NJ
705@end deffn
706@deffn {Scheme Procedure} stat:blksize st
f5f7888d
KR
707The optimal block size for reading or writing the file, in bytes. On
708some systems this field is not available, in which case
709@code{stat:blksize} returns a sensible suggested block size.
2ce02471
NJ
710@end deffn
711@deffn {Scheme Procedure} stat:blocks st
f5f7888d
KR
712The amount of disk space that the file occupies measured in units of
713512 byte blocks. On some systems this field is not available, in
714which case @code{stat:blocks} returns @code{#f}.
2ce02471 715@end deffn
a0e07ba4
NJ
716
717In addition, the following procedures return the information
5c3917e7 718from @code{stat:mode} in a more convenient form:
a0e07ba4 719
2ce02471 720@deffn {Scheme Procedure} stat:type st
a0e07ba4 721A symbol representing the type of file. Possible values are
7403e409
NJ
722@samp{regular}, @samp{directory}, @samp{symlink},
723@samp{block-special}, @samp{char-special}, @samp{fifo}, @samp{socket},
724and @samp{unknown}.
2ce02471
NJ
725@end deffn
726@deffn {Scheme Procedure} stat:perms st
a0e07ba4 727An integer representing the access permission bits.
2ce02471 728@end deffn
a0e07ba4
NJ
729@end deffn
730
64de6db5
BT
731@deffn {Scheme Procedure} lstat path
732@deffnx {C Function} scm_lstat (path)
a0e07ba4
NJ
733Similar to @code{stat}, but does not follow symbolic links, i.e.,
734it will return information about a symbolic link itself, not the
735file it points to. @var{path} must be a string.
736@end deffn
737
8f85c0c6
NJ
738@deffn {Scheme Procedure} readlink path
739@deffnx {C Function} scm_readlink (path)
a0e07ba4
NJ
740Return the value of the symbolic link named by @var{path} (a
741string), i.e., the file that the link points to.
742@end deffn
743
744@findex fchown
745@findex lchown
8f85c0c6
NJ
746@deffn {Scheme Procedure} chown object owner group
747@deffnx {C Function} scm_chown (object, owner, group)
7403e409
NJ
748Change the ownership and group of the file referred to by @var{object}
749to the integer values @var{owner} and @var{group}. @var{object} can
750be a string containing a file name or, if the platform supports
751@code{fchown} (@pxref{File Owner,,,libc,The GNU C Library Reference
752Manual}), a port or integer file descriptor which is open on the file.
753The return value is unspecified.
a0e07ba4
NJ
754
755If @var{object} is a symbolic link, either the
756ownership of the link or the ownership of the referenced file will be
757changed depending on the operating system (lchown is
758unsupported at present). If @var{owner} or @var{group} is specified
759as @code{-1}, then that ID is not changed.
760@end deffn
761
762@findex fchmod
8f85c0c6
NJ
763@deffn {Scheme Procedure} chmod object mode
764@deffnx {C Function} scm_chmod (object, mode)
64de6db5
BT
765Changes the permissions of the file referred to by @var{object}.
766@var{object} can be a string containing a file name or a port or integer file
a0e07ba4
NJ
767descriptor which is open on a file (in which case @code{fchmod} is used
768as the underlying system call).
769@var{mode} specifies
770the new permissions as a decimal number, e.g., @code{(chmod "foo" #o755)}.
771The return value is unspecified.
772@end deffn
773
06bfe276
AW
774@deffn {Scheme Procedure} utime pathname [actime [modtime [actimens [modtimens [flags]]]]]
775@deffnx {C Function} scm_utime (pathname, actime, modtime, actimens, modtimens, flags)
a0e07ba4 776@code{utime} sets the access and modification times for the
64de6db5 777file named by @var{pathname}. If @var{actime} or @var{modtime} is
a0e07ba4
NJ
778not supplied, then the current time is used. @var{actime} and
779@var{modtime} must be integer time values as returned by the
780@code{current-time} procedure.
06bfe276
AW
781
782The optional @var{actimens} and @var{modtimens} are nanoseconds
783to add @var{actime} and @var{modtime}. Nanosecond precision is
477e4219 784only supported on some combinations of file systems and operating
06bfe276 785systems.
a0e07ba4
NJ
786@lisp
787(utime "foo" (- (current-time) 3600))
788@end lisp
789will set the access time to one hour in the past and the
790modification time to the current time.
791@end deffn
792
793@findex unlink
8f85c0c6
NJ
794@deffn {Scheme Procedure} delete-file str
795@deffnx {C Function} scm_delete_file (str)
7403e409
NJ
796Deletes (or ``unlinks'') the file whose path is specified by
797@var{str}.
a0e07ba4
NJ
798@end deffn
799
8f85c0c6
NJ
800@deffn {Scheme Procedure} copy-file oldfile newfile
801@deffnx {C Function} scm_copy_file (oldfile, newfile)
7403e409 802Copy the file specified by @var{oldfile} to @var{newfile}.
a0e07ba4
NJ
803The return value is unspecified.
804@end deffn
805
fbac7c61
LC
806@deffn {Scheme Procedure} sendfile out in count [offset]
807@deffnx {C Function} scm_sendfile (out, in, count, offset)
808Send @var{count} bytes from @var{in} to @var{out}, both of which
e0886e07 809must be either open file ports or file descriptors. When
fbac7c61 810@var{offset} is omitted, start reading from @var{in}'s current
e0886e07
LC
811position; otherwise, start reading at @var{offset}. Return
812the number of bytes actually sent.
fbac7c61
LC
813
814When @var{in} is a port, it is often preferable to specify @var{offset},
815because @var{in}'s offset as a port may be different from the offset of
816its underlying file descriptor.
817
818On systems that support it, such as GNU/Linux, this procedure uses the
819@code{sendfile} libc function, which usually corresponds to a system
820call. This is faster than doing a series of @code{read} and
821@code{write} system calls. A typical application is to send a file over
822a socket.
823
824In some cases, the @code{sendfile} libc function may return
825@code{EINVAL} or @code{ENOSYS}. In that case, Guile's @code{sendfile}
826procedure automatically falls back to doing a series of @code{read} and
827@code{write} calls.
e0886e07
LC
828
829In other cases, the libc function may send fewer bytes than
830@var{count}---for instance because @var{out} is a slow or limited
831device, such as a pipe. When that happens, Guile's @code{sendfile}
832automatically retries until exactly @var{count} bytes were sent or an
833error occurs.
fbac7c61
LC
834@end deffn
835
a0e07ba4 836@findex rename
8f85c0c6
NJ
837@deffn {Scheme Procedure} rename-file oldname newname
838@deffnx {C Function} scm_rename (oldname, newname)
a0e07ba4
NJ
839Renames the file specified by @var{oldname} to @var{newname}.
840The return value is unspecified.
841@end deffn
842
8f85c0c6
NJ
843@deffn {Scheme Procedure} link oldpath newpath
844@deffnx {C Function} scm_link (oldpath, newpath)
a0e07ba4
NJ
845Creates a new name @var{newpath} in the file system for the
846file named by @var{oldpath}. If @var{oldpath} is a symbolic
847link, the link may or may not be followed depending on the
848system.
849@end deffn
850
8f85c0c6
NJ
851@deffn {Scheme Procedure} symlink oldpath newpath
852@deffnx {C Function} scm_symlink (oldpath, newpath)
7403e409
NJ
853Create a symbolic link named @var{newpath} with the value (i.e., pointing to)
854@var{oldpath}. The return value is unspecified.
a0e07ba4
NJ
855@end deffn
856
8f85c0c6
NJ
857@deffn {Scheme Procedure} mkdir path [mode]
858@deffnx {C Function} scm_mkdir (path, mode)
a0e07ba4
NJ
859Create a new directory named by @var{path}. If @var{mode} is omitted
860then the permissions of the directory file are set using the current
7403e409
NJ
861umask (@pxref{Processes}). Otherwise they are set to the decimal
862value specified with @var{mode}. The return value is unspecified.
a0e07ba4
NJ
863@end deffn
864
8f85c0c6
NJ
865@deffn {Scheme Procedure} rmdir path
866@deffnx {C Function} scm_rmdir (path)
a0e07ba4
NJ
867Remove the existing directory named by @var{path}. The directory must
868be empty for this to succeed. The return value is unspecified.
869@end deffn
870
8f85c0c6
NJ
871@deffn {Scheme Procedure} opendir dirname
872@deffnx {C Function} scm_opendir (dirname)
f3dfb8ac 873@cindex directory contents
7403e409 874Open the directory specified by @var{dirname} and return a directory
a0e07ba4 875stream.
46e78202
LC
876
877Before using this and the procedures below, make sure to see the
878higher-level procedures for directory traversal that are available
879(@pxref{File Tree Walk}).
a0e07ba4
NJ
880@end deffn
881
7403e409
NJ
882@deffn {Scheme Procedure} directory-stream? object
883@deffnx {C Function} scm_directory_stream_p (object)
a0e07ba4
NJ
884Return a boolean indicating whether @var{object} is a directory
885stream as returned by @code{opendir}.
886@end deffn
887
7403e409
NJ
888@deffn {Scheme Procedure} readdir stream
889@deffnx {C Function} scm_readdir (stream)
a0e07ba4
NJ
890Return (as a string) the next directory entry from the directory stream
891@var{stream}. If there is no remaining entry to be read then the
892end of file object is returned.
893@end deffn
894
7403e409
NJ
895@deffn {Scheme Procedure} rewinddir stream
896@deffnx {C Function} scm_rewinddir (stream)
a0e07ba4
NJ
897Reset the directory port @var{stream} so that the next call to
898@code{readdir} will return the first directory entry.
899@end deffn
900
7403e409
NJ
901@deffn {Scheme Procedure} closedir stream
902@deffnx {C Function} scm_closedir (stream)
a0e07ba4
NJ
903Close the directory stream @var{stream}.
904The return value is unspecified.
905@end deffn
906
bcf009c3
NJ
907Here is an example showing how to display all the entries in a
908directory:
909
910@lisp
911(define dir (opendir "/usr/lib"))
912(do ((entry (readdir dir) (readdir dir)))
913 ((eof-object? entry))
914 (display entry)(newline))
915(closedir dir)
916@end lisp
917
8f85c0c6
NJ
918@deffn {Scheme Procedure} sync
919@deffnx {C Function} scm_sync ()
a0e07ba4
NJ
920Flush the operating system disk buffers.
921The return value is unspecified.
922@end deffn
923
8f85c0c6
NJ
924@deffn {Scheme Procedure} mknod path type perms dev
925@deffnx {C Function} scm_mknod (path, type, perms, dev)
f3dfb8ac 926@cindex device file
a0e07ba4 927Creates a new special file, such as a file corresponding to a device.
7403e409
NJ
928@var{path} specifies the name of the file. @var{type} should be one
929of the following symbols: @samp{regular}, @samp{directory},
930@samp{symlink}, @samp{block-special}, @samp{char-special},
931@samp{fifo}, or @samp{socket}. @var{perms} (an integer) specifies the
932file permissions. @var{dev} (an integer) specifies which device the
933special file refers to. Its exact interpretation depends on the kind
934of special file being created.
a0e07ba4
NJ
935
936E.g.,
937@lisp
938(mknod "/dev/fd0" 'block-special #o660 (+ (* 2 256) 2))
939@end lisp
940
941The return value is unspecified.
942@end deffn
943
8f85c0c6
NJ
944@deffn {Scheme Procedure} tmpnam
945@deffnx {C Function} scm_tmpnam ()
f3dfb8ac 946@cindex temporary file
0b0715f1
KR
947Return an auto-generated name of a temporary file, a file which
948doesn't already exist. The name includes a path, it's usually in
949@file{/tmp} but that's system dependent.
950
951Care must be taken when using @code{tmpnam}. In between choosing the
952name and creating the file another program might use that name, or an
953attacker might even make it a symlink pointing at something important
954and causing you to overwrite that.
955
956The safe way is to create the file using @code{open} with
957@code{O_EXCL} to avoid any overwriting. A loop can try again with
958another name if the file exists (error @code{EEXIST}).
959@code{mkstemp!} below does that.
a0e07ba4
NJ
960@end deffn
961
8f85c0c6
NJ
962@deffn {Scheme Procedure} mkstemp! tmpl
963@deffnx {C Function} scm_mkstemp (tmpl)
f3dfb8ac 964@cindex temporary file
0b0715f1
KR
965Create a new unique file in the file system and return a new buffered
966port open for reading and writing to the file.
24ec486c 967
0b0715f1
KR
968@var{tmpl} is a string specifying where the file should be created: it
969must end with @samp{XXXXXX} and those @samp{X}s will be changed in the
970string to return the name of the file. (@code{port-filename} on the
971port also gives the name.)
24ec486c 972
0b0715f1
KR
973POSIX doesn't specify the permissions mode of the file, on GNU and
974most systems it's @code{#o600}. An application can use @code{chmod}
975to relax that if desired. For example @code{#o666} less @code{umask},
976which is usual for ordinary file creation,
61fdb557
KR
977
978@example
0b0715f1 979(let ((port (mkstemp! (string-copy "/tmp/myfile-XXXXXX"))))
61fdb557
KR
980 (chmod port (logand #o666 (lognot (umask))))
981 ...)
982@end example
a0e07ba4
NJ
983@end deffn
984
cd53bd36 985@deffn {Scheme Procedure} tmpfile
5f6ffd66 986@deffnx {C Function} scm_tmpfile ()
cd53bd36
TTN
987Return an input/output port to a unique temporary file
988named using the path prefix @code{P_tmpdir} defined in
989@file{stdio.h}.
990The file is automatically deleted when the port is closed
991or the program terminates.
992@end deffn
993
8f85c0c6
NJ
994@deffn {Scheme Procedure} dirname filename
995@deffnx {C Function} scm_dirname (filename)
a0e07ba4
NJ
996Return the directory name component of the file name
997@var{filename}. If @var{filename} does not contain a directory
998component, @code{.} is returned.
999@end deffn
1000
8f85c0c6
NJ
1001@deffn {Scheme Procedure} basename filename [suffix]
1002@deffnx {C Function} scm_basename (filename, suffix)
a0e07ba4
NJ
1003Return the base name of the file name @var{filename}. The
1004base name is the file name without any directory components.
85a9b4ed 1005If @var{suffix} is provided, and is equal to the end of
a0e07ba4 1006@var{basename}, it is removed also.
bcf009c3
NJ
1007
1008@lisp
1009(basename "/tmp/test.xml" ".xml")
1010@result{} "test"
1011@end lisp
a0e07ba4
NJ
1012@end deffn
1013
839e6326
NJ
1014@deffn {Scheme Procedure} file-exists? filename
1015Return @code{#t} if the file named @var{filename} exists, @code{#f} if
1016not.
1017@end deffn
1018
66750b78
LC
1019@cindex file name separator
1020@cindex absolute file name
1021
1022Many operating systems, such as GNU, use @code{/} (forward slash) to
1023separate the components of a file name; any file name starting with
1024@code{/} is considered an @dfn{absolute file name}. These conventions
1025are specified by the POSIX Base Definitions, which refer to conforming
1026file names as ``pathnames''. Some operating systems use a different
1027convention; in particular, Windows uses @code{\} (backslash) as the file
1028name separator, and also has the notion of @dfn{volume names} like
1029@code{C:\} for absolute file names. The following procedures and
1030variables provide support for portable file name manipulations.
1031
1032@deffn {Scheme Procedure} system-file-name-convention
1033Return either @code{posix} or @code{windows}, depending on
1034what kind of system this Guile is running on.
1035@end deffn
1036
1037@deffn {Scheme Procedure} file-name-separator? c
1038Return true if character @var{c} is a file name separator on the host
1039platform.
1040@end deffn
1041
1042@deffn {Scheme Procedure} absolute-file-name? file-name
1043Return true if @var{file-name} denotes an absolute file name on the host
1044platform.
1045@end deffn
1046
1047@defvr {Scheme Variable} file-name-separator-string
7d39b488
LC
1048The preferred file name separator.
1049
1050Note that on MinGW builds for Windows, both @code{/} and @code{\} are
1051valid separators. Thus, programs should not assume that
1052@code{file-name-separator-string} is the @emph{only} file name
1053separator---e.g., when extracting the components of a file name.
66750b78
LC
1054@end defvr
1055
a0e07ba4
NJ
1056
1057@node User Information
3229f68b 1058@subsection User Information
f3dfb8ac
KR
1059@cindex user information
1060@cindex password file
1061@cindex group file
a0e07ba4
NJ
1062
1063The facilities in this section provide an interface to the user and
1064group database.
1065They should be used with care since they are not reentrant.
1066
1067The following functions accept an object representing user information
1068and return a selected component:
1069
2ce02471 1070@deffn {Scheme Procedure} passwd:name pw
a0e07ba4 1071The name of the userid.
2ce02471
NJ
1072@end deffn
1073@deffn {Scheme Procedure} passwd:passwd pw
a0e07ba4 1074The encrypted passwd.
2ce02471
NJ
1075@end deffn
1076@deffn {Scheme Procedure} passwd:uid pw
a0e07ba4 1077The user id number.
2ce02471
NJ
1078@end deffn
1079@deffn {Scheme Procedure} passwd:gid pw
a0e07ba4 1080The group id number.
2ce02471
NJ
1081@end deffn
1082@deffn {Scheme Procedure} passwd:gecos pw
a0e07ba4 1083The full name.
2ce02471
NJ
1084@end deffn
1085@deffn {Scheme Procedure} passwd:dir pw
a0e07ba4 1086The home directory.
2ce02471
NJ
1087@end deffn
1088@deffn {Scheme Procedure} passwd:shell pw
a0e07ba4 1089The login shell.
2ce02471
NJ
1090@end deffn
1091@sp 1
a0e07ba4 1092
8f85c0c6 1093@deffn {Scheme Procedure} getpwuid uid
a0e07ba4
NJ
1094Look up an integer userid in the user database.
1095@end deffn
1096
8f85c0c6 1097@deffn {Scheme Procedure} getpwnam name
a0e07ba4
NJ
1098Look up a user name string in the user database.
1099@end deffn
1100
8f85c0c6 1101@deffn {Scheme Procedure} setpwent
a0e07ba4
NJ
1102Initializes a stream used by @code{getpwent} to read from the user database.
1103The next use of @code{getpwent} will return the first entry. The
1104return value is unspecified.
1105@end deffn
1106
8f85c0c6 1107@deffn {Scheme Procedure} getpwent
40296bab
KR
1108Read the next entry in the user database stream. The return is a
1109passwd user object as above, or @code{#f} when no more entries.
a0e07ba4
NJ
1110@end deffn
1111
8f85c0c6 1112@deffn {Scheme Procedure} endpwent
a0e07ba4
NJ
1113Closes the stream used by @code{getpwent}. The return value is unspecified.
1114@end deffn
1115
8f85c0c6
NJ
1116@deffn {Scheme Procedure} setpw [arg]
1117@deffnx {C Function} scm_setpwent (arg)
a0e07ba4
NJ
1118If called with a true argument, initialize or reset the password data
1119stream. Otherwise, close the stream. The @code{setpwent} and
1120@code{endpwent} procedures are implemented on top of this.
1121@end deffn
1122
8f85c0c6
NJ
1123@deffn {Scheme Procedure} getpw [user]
1124@deffnx {C Function} scm_getpwuid (user)
64de6db5 1125Look up an entry in the user database. @var{user} can be an integer,
a0e07ba4
NJ
1126a string, or omitted, giving the behaviour of getpwuid, getpwnam
1127or getpwent respectively.
1128@end deffn
1129
1130The following functions accept an object representing group information
1131and return a selected component:
1132
2ce02471 1133@deffn {Scheme Procedure} group:name gr
a0e07ba4 1134The group name.
2ce02471
NJ
1135@end deffn
1136@deffn {Scheme Procedure} group:passwd gr
a0e07ba4 1137The encrypted group password.
2ce02471
NJ
1138@end deffn
1139@deffn {Scheme Procedure} group:gid gr
a0e07ba4 1140The group id number.
2ce02471
NJ
1141@end deffn
1142@deffn {Scheme Procedure} group:mem gr
85a9b4ed 1143A list of userids which have this group as a supplementary group.
2ce02471
NJ
1144@end deffn
1145@sp 1
a0e07ba4 1146
8f85c0c6 1147@deffn {Scheme Procedure} getgrgid gid
85a9b4ed 1148Look up an integer group id in the group database.
a0e07ba4
NJ
1149@end deffn
1150
8f85c0c6 1151@deffn {Scheme Procedure} getgrnam name
a0e07ba4
NJ
1152Look up a group name in the group database.
1153@end deffn
1154
8f85c0c6 1155@deffn {Scheme Procedure} setgrent
a0e07ba4
NJ
1156Initializes a stream used by @code{getgrent} to read from the group database.
1157The next use of @code{getgrent} will return the first entry.
1158The return value is unspecified.
1159@end deffn
1160
8f85c0c6 1161@deffn {Scheme Procedure} getgrent
a0e07ba4
NJ
1162Return the next entry in the group database, using the stream set by
1163@code{setgrent}.
1164@end deffn
1165
8f85c0c6 1166@deffn {Scheme Procedure} endgrent
a0e07ba4
NJ
1167Closes the stream used by @code{getgrent}.
1168The return value is unspecified.
1169@end deffn
1170
8f85c0c6
NJ
1171@deffn {Scheme Procedure} setgr [arg]
1172@deffnx {C Function} scm_setgrent (arg)
a0e07ba4
NJ
1173If called with a true argument, initialize or reset the group data
1174stream. Otherwise, close the stream. The @code{setgrent} and
1175@code{endgrent} procedures are implemented on top of this.
1176@end deffn
1177
64de6db5
BT
1178@deffn {Scheme Procedure} getgr [group]
1179@deffnx {C Function} scm_getgrgid (group)
1180Look up an entry in the group database. @var{group} can be an integer,
a0e07ba4
NJ
1181a string, or omitted, giving the behaviour of getgrgid, getgrnam
1182or getgrent respectively.
1183@end deffn
1184
1185In addition to the accessor procedures for the user database, the
cd28785f 1186following shortcut procedure is also available.
a0e07ba4 1187
8f85c0c6
NJ
1188@deffn {Scheme Procedure} getlogin
1189@deffnx {C Function} scm_getlogin ()
a0e07ba4
NJ
1190Return a string containing the name of the user logged in on
1191the controlling terminal of the process, or @code{#f} if this
1192information cannot be obtained.
1193@end deffn
1194
1195
1196@node Time
3229f68b 1197@subsection Time
f3dfb8ac 1198@cindex time
a0e07ba4 1199
8f85c0c6
NJ
1200@deffn {Scheme Procedure} current-time
1201@deffnx {C Function} scm_current_time ()
7403e409 1202Return the number of seconds since 1970-01-01 00:00:00 @acronym{UTC},
a0e07ba4
NJ
1203excluding leap seconds.
1204@end deffn
1205
8f85c0c6
NJ
1206@deffn {Scheme Procedure} gettimeofday
1207@deffnx {C Function} scm_gettimeofday ()
a0e07ba4 1208Return a pair containing the number of seconds and microseconds
7403e409 1209since 1970-01-01 00:00:00 @acronym{UTC}, excluding leap seconds. Note:
a0e07ba4
NJ
1210whether true microsecond resolution is available depends on the
1211operating system.
1212@end deffn
1213
1214The following procedures either accept an object representing a broken down
1215time and return a selected component, or accept an object representing
1216a broken down time and a value and set the component to the value.
1217The numbers in parentheses give the usual range.
1218
2ce02471
NJ
1219@deffn {Scheme Procedure} tm:sec tm
1220@deffnx {Scheme Procedure} set-tm:sec tm val
a0e07ba4 1221Seconds (0-59).
2ce02471
NJ
1222@end deffn
1223@deffn {Scheme Procedure} tm:min tm
1224@deffnx {Scheme Procedure} set-tm:min tm val
a0e07ba4 1225Minutes (0-59).
2ce02471
NJ
1226@end deffn
1227@deffn {Scheme Procedure} tm:hour tm
1228@deffnx {Scheme Procedure} set-tm:hour tm val
a0e07ba4 1229Hours (0-23).
2ce02471
NJ
1230@end deffn
1231@deffn {Scheme Procedure} tm:mday tm
1232@deffnx {Scheme Procedure} set-tm:mday tm val
a0e07ba4 1233Day of the month (1-31).
2ce02471
NJ
1234@end deffn
1235@deffn {Scheme Procedure} tm:mon tm
1236@deffnx {Scheme Procedure} set-tm:mon tm val
a0e07ba4 1237Month (0-11).
2ce02471
NJ
1238@end deffn
1239@deffn {Scheme Procedure} tm:year tm
1240@deffnx {Scheme Procedure} set-tm:year tm val
a0e07ba4 1241Year (70-), the year minus 1900.
2ce02471
NJ
1242@end deffn
1243@deffn {Scheme Procedure} tm:wday tm
1244@deffnx {Scheme Procedure} set-tm:wday tm val
a0e07ba4 1245Day of the week (0-6) with Sunday represented as 0.
2ce02471
NJ
1246@end deffn
1247@deffn {Scheme Procedure} tm:yday tm
1248@deffnx {Scheme Procedure} set-tm:yday tm val
a0e07ba4 1249Day of the year (0-364, 365 in leap years).
2ce02471
NJ
1250@end deffn
1251@deffn {Scheme Procedure} tm:isdst tm
1252@deffnx {Scheme Procedure} set-tm:isdst tm val
7403e409
NJ
1253Daylight saving indicator (0 for ``no'', greater than 0 for ``yes'', less than
12540 for ``unknown'').
2ce02471
NJ
1255@end deffn
1256@deffn {Scheme Procedure} tm:gmtoff tm
1257@deffnx {Scheme Procedure} set-tm:gmtoff tm val
7403e409 1258Time zone offset in seconds west of @acronym{UTC} (-46800 to 43200).
40296bab
KR
1259For example on East coast USA (zone @samp{EST+5}) this would be 18000
1260(ie.@: @m{5\times60\times60,5*60*60}) in winter, or 14400
1261(ie.@: @m{4\times60\times60,4*60*60}) during daylight savings.
1262
1263Note @code{tm:gmtoff} is not the same as @code{tm_gmtoff} in the C
1264@code{tm} structure. @code{tm_gmtoff} is seconds east and hence the
1265negative of the value here.
2ce02471
NJ
1266@end deffn
1267@deffn {Scheme Procedure} tm:zone tm
1268@deffnx {Scheme Procedure} set-tm:zone tm val
a0e07ba4 1269Time zone label (a string), not necessarily unique.
2ce02471
NJ
1270@end deffn
1271@sp 1
a0e07ba4 1272
8f85c0c6
NJ
1273@deffn {Scheme Procedure} localtime time [zone]
1274@deffnx {C Function} scm_localtime (time, zone)
f3dfb8ac 1275@cindex local time
a0e07ba4
NJ
1276Return an object representing the broken down components of
1277@var{time}, an integer like the one returned by
1278@code{current-time}. The time zone for the calculation is
1279optionally specified by @var{zone} (a string), otherwise the
7403e409 1280@env{TZ} environment variable or the system default is used.
a0e07ba4
NJ
1281@end deffn
1282
8f85c0c6
NJ
1283@deffn {Scheme Procedure} gmtime time
1284@deffnx {C Function} scm_gmtime (time)
a0e07ba4
NJ
1285Return an object representing the broken down components of
1286@var{time}, an integer like the one returned by
7403e409 1287@code{current-time}. The values are calculated for @acronym{UTC}.
a0e07ba4
NJ
1288@end deffn
1289
82512be0 1290@deffn {Scheme Procedure} mktime sbd-time [zone]
8f85c0c6 1291@deffnx {C Function} scm_mktime (sbd_time, zone)
b0fb2306
KR
1292For a broken down time object @var{sbd-time}, return a pair the
1293@code{car} of which is an integer time like @code{current-time}, and
1294the @code{cdr} of which is a new broken down time with normalized
1295fields.
1296
1297@var{zone} is a timezone string, or the default is the @env{TZ}
1298environment variable or the system default (@pxref{TZ Variable,,
1299Specifying the Time Zone with @env{TZ}, libc, GNU C Library Reference
1300Manual}). @var{sbd-time} is taken to be in that @var{zone}.
1301
1302The following fields of @var{sbd-time} are used: @code{tm:year},
1303@code{tm:mon}, @code{tm:mday}, @code{tm:hour}, @code{tm:min},
1304@code{tm:sec}, @code{tm:isdst}. The values can be outside their usual
1305ranges. For example @code{tm:hour} normally goes up to 23, but a
1306value say 33 would mean 9 the following day.
1307
1308@code{tm:isdst} in @var{sbd-time} says whether the time given is with
1309daylight savings or not. This is ignored if @var{zone} doesn't have
1310any daylight savings adjustment amount.
1311
1312The broken down time in the return normalizes the values of
1313@var{sbd-time} by bringing them into their usual ranges, and using the
1314actual daylight savings rule for that time in @var{zone} (which may
1315differ from what @var{sbd-time} had). The easiest way to think of
1316this is that @var{sbd-time} plus @var{zone} converts to the integer
1317UTC time, then a @code{localtime} is applied to get the normal
1318presentation of that time, in @var{zone}.
a0e07ba4
NJ
1319@end deffn
1320
8f85c0c6
NJ
1321@deffn {Scheme Procedure} tzset
1322@deffnx {C Function} scm_tzset ()
7403e409 1323Initialize the timezone from the @env{TZ} environment variable
a0e07ba4
NJ
1324or the system default. It's not usually necessary to call this procedure
1325since it's done automatically by other procedures that depend on the
1326timezone.
1327@end deffn
1328
4b08cab6
KR
1329@deffn {Scheme Procedure} strftime format tm
1330@deffnx {C Function} scm_strftime (format, tm)
f3dfb8ac 1331@cindex time formatting
4b08cab6
KR
1332Return a string which is broken-down time structure @var{tm} formatted
1333according to the given @var{format} string.
1334
1335@var{format} contains field specifications introduced by a @samp{%}
1336character. See @ref{Formatting Calendar Time,,, libc, The GNU C
1337Library Reference Manual}, or @samp{man 3 strftime}, for the available
1338formatting.
bcf009c3
NJ
1339
1340@lisp
1341(strftime "%c" (localtime (current-time)))
1342@result{} "Mon Mar 11 20:17:43 2002"
1343@end lisp
4b08cab6
KR
1344
1345If @code{setlocale} has been called (@pxref{Locales}), month and day
1346names are from the current locale and in the locale character set.
a0e07ba4
NJ
1347@end deffn
1348
8f85c0c6
NJ
1349@deffn {Scheme Procedure} strptime format string
1350@deffnx {C Function} scm_strptime (format, string)
f3dfb8ac 1351@cindex time parsing
a0e07ba4
NJ
1352Performs the reverse action to @code{strftime}, parsing
1353@var{string} according to the specification supplied in
64de6db5 1354@var{format}. The interpretation of month and day names is
a0e07ba4 1355dependent on the current locale. The value returned is a pair.
7403e409 1356The @acronym{CAR} has an object with time components
a0e07ba4
NJ
1357in the form returned by @code{localtime} or @code{gmtime},
1358but the time zone components
1359are not usefully set.
7403e409 1360The @acronym{CDR} reports the number of characters from @var{string}
a0e07ba4
NJ
1361which were used for the conversion.
1362@end deffn
1363
1364@defvar internal-time-units-per-second
1365The value of this variable is the number of time units per second
1366reported by the following procedures.
1367@end defvar
1368
8f85c0c6
NJ
1369@deffn {Scheme Procedure} times
1370@deffnx {C Function} scm_times ()
a0e07ba4
NJ
1371Return an object with information about real and processor
1372time. The following procedures accept such an object as an
1373argument and return a selected component:
1374
2ce02471 1375@deffn {Scheme Procedure} tms:clock tms
a0e07ba4
NJ
1376The current real time, expressed as time units relative to an
1377arbitrary base.
2ce02471
NJ
1378@end deffn
1379@deffn {Scheme Procedure} tms:utime tms
a0e07ba4 1380The CPU time units used by the calling process.
2ce02471
NJ
1381@end deffn
1382@deffn {Scheme Procedure} tms:stime tms
a0e07ba4
NJ
1383The CPU time units used by the system on behalf of the calling
1384process.
2ce02471
NJ
1385@end deffn
1386@deffn {Scheme Procedure} tms:cutime tms
a0e07ba4
NJ
1387The CPU time units used by terminated child processes of the
1388calling process, whose status has been collected (e.g., using
1389@code{waitpid}).
2ce02471
NJ
1390@end deffn
1391@deffn {Scheme Procedure} tms:cstime tms
a0e07ba4
NJ
1392Similarly, the CPU times units used by the system on behalf of
1393terminated child processes.
2ce02471 1394@end deffn
a0e07ba4
NJ
1395@end deffn
1396
8f85c0c6
NJ
1397@deffn {Scheme Procedure} get-internal-real-time
1398@deffnx {C Function} scm_get_internal_real_time ()
a0e07ba4
NJ
1399Return the number of time units since the interpreter was
1400started.
1401@end deffn
1402
8f85c0c6
NJ
1403@deffn {Scheme Procedure} get-internal-run-time
1404@deffnx {C Function} scm_get_internal_run_time ()
a0e07ba4
NJ
1405Return the number of time units of processor time used by the
1406interpreter. Both @emph{system} and @emph{user} time are
1407included but subprocesses are not.
1408@end deffn
1409
1410@node Runtime Environment
3229f68b 1411@subsection Runtime Environment
a0e07ba4 1412
8f85c0c6
NJ
1413@deffn {Scheme Procedure} program-arguments
1414@deffnx {Scheme Procedure} command-line
9a18d8d4 1415@deffnx {Scheme Procedure} set-program-arguments
8f85c0c6 1416@deffnx {C Function} scm_program_arguments ()
9a18d8d4 1417@deffnx {C Function} scm_set_program_arguments_scm (lst)
f3dfb8ac
KR
1418@cindex command line
1419@cindex program arguments
9a18d8d4
KR
1420Get the command line arguments passed to Guile, or set new arguments.
1421
1422The arguments are a list of strings, the first of which is the invoked
1423program name. This is just @nicode{"guile"} (or the executable path)
1424when run interactively, or it's the script name when running a script
1425with @option{-s} (@pxref{Invoking Guile}).
1426
1427@example
1428guile -L /my/extra/dir -s foo.scm abc def
1429
1430(program-arguments) @result{} ("foo.scm" "abc" "def")
1431@end example
1432
1433@code{set-program-arguments} allows a library module or similar to
1434modify the arguments, for example to strip options it recognises,
1435leaving the rest for the mainline.
1436
1437The argument list is held in a fluid, which means it's separate for
1438each thread. Neither the list nor the strings within it are copied at
1439any point and normally should not be mutated.
1440
1441The two names @code{program-arguments} and @code{command-line} are an
1442historical accident, they both do exactly the same thing. The name
1443@code{scm_set_program_arguments_scm} has an extra @code{_scm} on the
1444end to avoid clashing with the C function below.
a0e07ba4
NJ
1445@end deffn
1446
9a18d8d4
KR
1447@deftypefn {C Function} void scm_set_program_arguments (int argc, char **argv, char *first)
1448@cindex command line
1449@cindex program arguments
1450Set the list of command line arguments for @code{program-arguments}
1451and @code{command-line} above.
1452
1453@var{argv} is an array of null-terminated strings, as in a C
1454@code{main} function. @var{argc} is the number of strings in
bf5df489
KR
1455@var{argv}, or if it's negative then a @code{NULL} in @var{argv} marks
1456its end.
9a18d8d4
KR
1457
1458@var{first} is an extra string put at the start of the arguments, or
1459@code{NULL} for no such extra. This is a convenient way to pass the
1460program name after advancing @var{argv} to strip option arguments.
bf5df489 1461Eg.@:
9a18d8d4
KR
1462
1463@example
1464@{
1465 char *progname = argv[0];
9a18d8d4
KR
1466 for (argv++; argv[0] != NULL && argv[0][0] == '-'; argv++)
1467 @{
1468 /* munch option ... */
1469 @}
1470 /* remaining args for scheme level use */
1471 scm_set_program_arguments (-1, argv, progname);
1472@}
1473@end example
1474
1475This sort of thing is often done at startup under
bf5df489 1476@code{scm_boot_guile} with options handled at the C level removed.
9a18d8d4
KR
1477The given strings are all copied, so the C data is not accessed again
1478once @code{scm_set_program_arguments} returns.
1479@end deftypefn
1480
64de6db5
BT
1481@deffn {Scheme Procedure} getenv name
1482@deffnx {C Function} scm_getenv (name)
f3dfb8ac 1483@cindex environment
a0e07ba4
NJ
1484Looks up the string @var{name} in the current environment. The return
1485value is @code{#f} unless a string of the form @code{NAME=VALUE} is
1486found, in which case the string @code{VALUE} is returned.
1487@end deffn
1488
8f85c0c6 1489@deffn {Scheme Procedure} setenv name value
a0e07ba4
NJ
1490Modifies the environment of the current process, which is
1491also the default environment inherited by child processes.
1492
1493If @var{value} is @code{#f}, then @var{name} is removed from the
1494environment. Otherwise, the string @var{name}=@var{value} is added
1495to the environment, replacing any existing string with name matching
1496@var{name}.
1497
1498The return value is unspecified.
1499@end deffn
1500
395b0a34
NJ
1501@deffn {Scheme Procedure} unsetenv name
1502Remove variable @var{name} from the environment. The
1503name can not contain a @samp{=} character.
1504@end deffn
1505
8f85c0c6
NJ
1506@deffn {Scheme Procedure} environ [env]
1507@deffnx {C Function} scm_environ (env)
a0e07ba4
NJ
1508If @var{env} is omitted, return the current environment (in the
1509Unix sense) as a list of strings. Otherwise set the current
1510environment, which is also the default environment for child
1511processes, to the supplied list of strings. Each member of
64de6db5
BT
1512@var{env} should be of the form @var{name}=@var{value} and values of
1513@var{name} should not be duplicated. If @var{env} is supplied
a0e07ba4
NJ
1514then the return value is unspecified.
1515@end deffn
1516
8f85c0c6
NJ
1517@deffn {Scheme Procedure} putenv str
1518@deffnx {C Function} scm_putenv (str)
a0e07ba4
NJ
1519Modifies the environment of the current process, which is
1520also the default environment inherited by child processes.
1521
64de6db5 1522If @var{str} is of the form @code{NAME=VALUE} then it will be written
a0e07ba4
NJ
1523directly into the environment, replacing any existing environment string
1524with
64de6db5
BT
1525name matching @code{NAME}. If @var{str} does not contain an equal
1526sign, then any existing string with name matching @var{str} will
a0e07ba4
NJ
1527be removed.
1528
1529The return value is unspecified.
1530@end deffn
1531
1532
1533@node Processes
3229f68b 1534@subsection Processes
f3dfb8ac
KR
1535@cindex processes
1536@cindex child processes
a0e07ba4
NJ
1537
1538@findex cd
8f85c0c6
NJ
1539@deffn {Scheme Procedure} chdir str
1540@deffnx {C Function} scm_chdir (str)
f3dfb8ac 1541@cindex current directory
64de6db5 1542Change the current working directory to @var{str}.
a0e07ba4
NJ
1543The return value is unspecified.
1544@end deffn
1545
1546@findex pwd
8f85c0c6
NJ
1547@deffn {Scheme Procedure} getcwd
1548@deffnx {C Function} scm_getcwd ()
a0e07ba4
NJ
1549Return the name of the current working directory.
1550@end deffn
1551
8f85c0c6
NJ
1552@deffn {Scheme Procedure} umask [mode]
1553@deffnx {C Function} scm_umask (mode)
7403e409
NJ
1554If @var{mode} is omitted, returns a decimal number representing the
1555current file creation mask. Otherwise the file creation mask is set
1556to @var{mode} and the previous value is returned. @xref{Setting
1557Permissions,,Assigning File Permissions,libc,The GNU C Library
1558Reference Manual}, for more on how to use umasks.
a0e07ba4 1559
7403e409 1560E.g., @code{(umask #o022)} sets the mask to octal 22/decimal 18.
a0e07ba4
NJ
1561@end deffn
1562
8f85c0c6
NJ
1563@deffn {Scheme Procedure} chroot path
1564@deffnx {C Function} scm_chroot (path)
a0e07ba4
NJ
1565Change the root directory to that specified in @var{path}.
1566This directory will be used for path names beginning with
1567@file{/}. The root directory is inherited by all children
1568of the current process. Only the superuser may change the
1569root directory.
1570@end deffn
1571
8f85c0c6
NJ
1572@deffn {Scheme Procedure} getpid
1573@deffnx {C Function} scm_getpid ()
a0e07ba4
NJ
1574Return an integer representing the current process ID.
1575@end deffn
1576
8f85c0c6
NJ
1577@deffn {Scheme Procedure} getgroups
1578@deffnx {C Function} scm_getgroups ()
a0e07ba4 1579Return a vector of integers representing the current
85a9b4ed 1580supplementary group IDs.
a0e07ba4
NJ
1581@end deffn
1582
8f85c0c6
NJ
1583@deffn {Scheme Procedure} getppid
1584@deffnx {C Function} scm_getppid ()
a0e07ba4
NJ
1585Return an integer representing the process ID of the parent
1586process.
1587@end deffn
1588
8f85c0c6
NJ
1589@deffn {Scheme Procedure} getuid
1590@deffnx {C Function} scm_getuid ()
a0e07ba4
NJ
1591Return an integer representing the current real user ID.
1592@end deffn
1593
8f85c0c6
NJ
1594@deffn {Scheme Procedure} getgid
1595@deffnx {C Function} scm_getgid ()
a0e07ba4
NJ
1596Return an integer representing the current real group ID.
1597@end deffn
1598
8f85c0c6
NJ
1599@deffn {Scheme Procedure} geteuid
1600@deffnx {C Function} scm_geteuid ()
a0e07ba4
NJ
1601Return an integer representing the current effective user ID.
1602If the system does not support effective IDs, then the real ID
66add4eb 1603is returned. @code{(provided? 'EIDs)} reports whether the
a0e07ba4
NJ
1604system supports effective IDs.
1605@end deffn
1606
8f85c0c6
NJ
1607@deffn {Scheme Procedure} getegid
1608@deffnx {C Function} scm_getegid ()
a0e07ba4
NJ
1609Return an integer representing the current effective group ID.
1610If the system does not support effective IDs, then the real ID
66add4eb 1611is returned. @code{(provided? 'EIDs)} reports whether the
a0e07ba4
NJ
1612system supports effective IDs.
1613@end deffn
1614
ef048324
KR
1615@deffn {Scheme Procedure} setgroups vec
1616@deffnx {C Function} scm_setgroups (vec)
1617Set the current set of supplementary group IDs to the integers in the
1618given vector @var{vec}. The return value is unspecified.
1619
1620Generally only the superuser can set the process group IDs
1621(@pxref{Setting Groups, Setting the Group IDs,, libc, The GNU C
1622Library Reference Manual}).
1623@end deffn
1624
8f85c0c6
NJ
1625@deffn {Scheme Procedure} setuid id
1626@deffnx {C Function} scm_setuid (id)
a0e07ba4
NJ
1627Sets both the real and effective user IDs to the integer @var{id}, provided
1628the process has appropriate privileges.
1629The return value is unspecified.
1630@end deffn
1631
8f85c0c6
NJ
1632@deffn {Scheme Procedure} setgid id
1633@deffnx {C Function} scm_setgid (id)
a0e07ba4
NJ
1634Sets both the real and effective group IDs to the integer @var{id}, provided
1635the process has appropriate privileges.
1636The return value is unspecified.
1637@end deffn
1638
8f85c0c6
NJ
1639@deffn {Scheme Procedure} seteuid id
1640@deffnx {C Function} scm_seteuid (id)
a0e07ba4
NJ
1641Sets the effective user ID to the integer @var{id}, provided the process
1642has appropriate privileges. If effective IDs are not supported, the
7403e409 1643real ID is set instead---@code{(provided? 'EIDs)} reports whether the
a0e07ba4
NJ
1644system supports effective IDs.
1645The return value is unspecified.
1646@end deffn
1647
8f85c0c6
NJ
1648@deffn {Scheme Procedure} setegid id
1649@deffnx {C Function} scm_setegid (id)
a0e07ba4
NJ
1650Sets the effective group ID to the integer @var{id}, provided the process
1651has appropriate privileges. If effective IDs are not supported, the
7403e409 1652real ID is set instead---@code{(provided? 'EIDs)} reports whether the
a0e07ba4
NJ
1653system supports effective IDs.
1654The return value is unspecified.
1655@end deffn
1656
8f85c0c6
NJ
1657@deffn {Scheme Procedure} getpgrp
1658@deffnx {C Function} scm_getpgrp ()
a0e07ba4 1659Return an integer representing the current process group ID.
7403e409 1660This is the @acronym{POSIX} definition, not @acronym{BSD}.
a0e07ba4
NJ
1661@end deffn
1662
8f85c0c6
NJ
1663@deffn {Scheme Procedure} setpgid pid pgid
1664@deffnx {C Function} scm_setpgid (pid, pgid)
a0e07ba4
NJ
1665Move the process @var{pid} into the process group @var{pgid}. @var{pid} or
1666@var{pgid} must be integers: they can be zero to indicate the ID of the
1667current process.
1668Fails on systems that do not support job control.
1669The return value is unspecified.
1670@end deffn
1671
8f85c0c6
NJ
1672@deffn {Scheme Procedure} setsid
1673@deffnx {C Function} scm_setsid ()
a0e07ba4
NJ
1674Creates a new session. The current process becomes the session leader
1675and is put in a new process group. The process will be detached
1676from its controlling terminal if it has one.
1677The return value is an integer representing the new process group ID.
1678@end deffn
1679
211a5b04
NJ
1680@deffn {Scheme Procedure} getsid pid
1681@deffnx {C Function} scm_getsid (pid)
1682Returns the session ID of process @var{pid}. (The session
1683ID of a process is the process group ID of its session leader.)
1684@end deffn
1685
8f85c0c6
NJ
1686@deffn {Scheme Procedure} waitpid pid [options]
1687@deffnx {C Function} scm_waitpid (pid, options)
a0e07ba4
NJ
1688This procedure collects status information from a child process which
1689has terminated or (optionally) stopped. Normally it will
1690suspend the calling process until this can be done. If more than one
1691child process is eligible then one will be chosen by the operating system.
1692
1693The value of @var{pid} determines the behaviour:
1694
7403e409 1695@table @asis
a0e07ba4
NJ
1696@item @var{pid} greater than 0
1697Request status information from the specified child process.
7403e409 1698@item @var{pid} equal to -1 or @code{WAIT_ANY}
2ce02471 1699@vindex WAIT_ANY
a0e07ba4 1700Request status information for any child process.
7403e409 1701@item @var{pid} equal to 0 or @code{WAIT_MYPGRP}
2ce02471 1702@vindex WAIT_MYPGRP
a0e07ba4
NJ
1703Request status information for any child process in the current process
1704group.
1705@item @var{pid} less than -1
1706Request status information for any child process whose process group ID
7403e409 1707is @minus{}@var{pid}.
a0e07ba4
NJ
1708@end table
1709
1710The @var{options} argument, if supplied, should be the bitwise OR of the
1711values of zero or more of the following variables:
1712
1713@defvar WNOHANG
1714Return immediately even if there are no child processes to be collected.
1715@end defvar
1716
1717@defvar WUNTRACED
1718Report status information for stopped processes as well as terminated
1719processes.
1720@end defvar
1721
1722The return value is a pair containing:
1723
1724@enumerate
1725@item
1726The process ID of the child process, or 0 if @code{WNOHANG} was
1727specified and no process was collected.
1728@item
1729The integer status value.
1730@end enumerate
1731@end deffn
1732
1733The following three
1734functions can be used to decode the process status code returned
1735by @code{waitpid}.
1736
8f85c0c6
NJ
1737@deffn {Scheme Procedure} status:exit-val status
1738@deffnx {C Function} scm_status_exit_val (status)
a0e07ba4
NJ
1739Return the exit status value, as would be set if a process
1740ended normally through a call to @code{exit} or @code{_exit},
1741if any, otherwise @code{#f}.
1742@end deffn
1743
8f85c0c6
NJ
1744@deffn {Scheme Procedure} status:term-sig status
1745@deffnx {C Function} scm_status_term_sig (status)
a0e07ba4
NJ
1746Return the signal number which terminated the process, if any,
1747otherwise @code{#f}.
1748@end deffn
1749
8f85c0c6
NJ
1750@deffn {Scheme Procedure} status:stop-sig status
1751@deffnx {C Function} scm_status_stop_sig (status)
a0e07ba4
NJ
1752Return the signal number which stopped the process, if any,
1753otherwise @code{#f}.
1754@end deffn
1755
8f85c0c6
NJ
1756@deffn {Scheme Procedure} system [cmd]
1757@deffnx {C Function} scm_system (cmd)
7403e409
NJ
1758Execute @var{cmd} using the operating system's ``command
1759processor''. Under Unix this is usually the default shell
a0e07ba4
NJ
1760@code{sh}. The value returned is @var{cmd}'s exit status as
1761returned by @code{waitpid}, which can be interpreted using the
1762functions above.
1763
1764If @code{system} is called without arguments, return a boolean
1765indicating whether the command processor is available.
1766@end deffn
1767
df0a1002 1768@deffn {Scheme Procedure} system* arg1 arg2 @dots{}
8141bd98 1769@deffnx {C Function} scm_system_star (args)
df0a1002
BT
1770Execute the command indicated by @var{arg1} @var{arg2} @enddots{}. The
1771first element must be a string indicating the command to be executed,
1772and the remaining items must be strings representing each of the
1773arguments to that command.
8141bd98
RB
1774
1775This function returns the exit status of the command as provided by
1776@code{waitpid}. This value can be handled with @code{status:exit-val}
1777and the related functions.
1778
1779@code{system*} is similar to @code{system}, but accepts only one
1780string per-argument, and performs no shell interpretation. The
1781command is executed using fork and execlp. Accordingly this function
1782may be safer than @code{system} in situations where shell
1783interpretation is not required.
1784
1785Example: (system* "echo" "foo" "bar")
1786@end deffn
1787
14ae4725
MG
1788@deffn {Scheme Procedure} quit [status]
1789@deffnx {Scheme Procedure} exit [status]
1790Terminate the current process with proper unwinding of the Scheme stack.
1791The exit status zero if @var{status} is not supplied. If @var{status}
1792is supplied, and it is an integer, that integer is used as the exit
1793status. If @var{status} is @code{#t} or @code{#f}, the exit status is 0
1794or 1, respectively.
1795
1796The procedure @code{exit} is an alias of @code{quit}. They have the
1797same functionality.
1798@end deffn
1799
8f85c0c6 1800@deffn {Scheme Procedure} primitive-exit [status]
23f2b9a3 1801@deffnx {Scheme Procedure} primitive-_exit [status]
8f85c0c6 1802@deffnx {C Function} scm_primitive_exit (status)
23f2b9a3
KR
1803@deffnx {C Function} scm_primitive__exit (status)
1804Terminate the current process without unwinding the Scheme stack. The
1805exit status is @var{status} if supplied, otherwise zero.
1806
1807@code{primitive-exit} uses the C @code{exit} function and hence runs
1808usual C level cleanups (flush output streams, call @code{atexit}
1809functions, etc, see @ref{Normal Termination,,, libc, The GNU C Library
1810Reference Manual})).
1811
1812@code{primitive-_exit} is the @code{_exit} system call
1813(@pxref{Termination Internals,,, libc, The GNU C Library Reference
1814Manual}). This terminates the program immediately, with neither
1815Scheme-level nor C-level cleanups.
1816
1817The typical use for @code{primitive-_exit} is from a child process
1818created with @code{primitive-fork}. For example in a Gdk program the
1819child process inherits the X server connection and a C-level
1820@code{atexit} cleanup which will close that connection. But closing
1821in the child would upset the protocol in the parent, so
1822@code{primitive-_exit} should be used to exit without that.
a0e07ba4
NJ
1823@end deffn
1824
df0a1002 1825@deffn {Scheme Procedure} execl filename arg @dots{}
8f85c0c6 1826@deffnx {C Function} scm_execl (filename, args)
64de6db5 1827Executes the file named by @var{filename} as a new process image.
a0e07ba4 1828The remaining arguments are supplied to the process; from a C program
85a9b4ed 1829they are accessible as the @code{argv} argument to @code{main}.
64de6db5 1830Conventionally the first @var{arg} is the same as @var{filename}.
a0e07ba4
NJ
1831All arguments must be strings.
1832
64de6db5 1833If @var{arg} is missing, @var{filename} is executed with a null
a0e07ba4
NJ
1834argument list, which may have system-dependent side-effects.
1835
1836This procedure is currently implemented using the @code{execv} system
1837call, but we call it @code{execl} because of its Scheme calling interface.
1838@end deffn
1839
df0a1002 1840@deffn {Scheme Procedure} execlp filename arg @dots{}
8f85c0c6 1841@deffnx {C Function} scm_execlp (filename, args)
a0e07ba4
NJ
1842Similar to @code{execl}, however if
1843@var{filename} does not contain a slash
1844then the file to execute will be located by searching the
1845directories listed in the @code{PATH} environment variable.
1846
1847This procedure is currently implemented using the @code{execvp} system
1848call, but we call it @code{execlp} because of its Scheme calling interface.
1849@end deffn
1850
df0a1002 1851@deffn {Scheme Procedure} execle filename env arg @dots{}
8f85c0c6 1852@deffnx {C Function} scm_execle (filename, env, args)
a0e07ba4
NJ
1853Similar to @code{execl}, but the environment of the new process is
1854specified by @var{env}, which must be a list of strings as returned by the
1855@code{environ} procedure.
1856
1857This procedure is currently implemented using the @code{execve} system
1858call, but we call it @code{execle} because of its Scheme calling interface.
1859@end deffn
1860
8f85c0c6
NJ
1861@deffn {Scheme Procedure} primitive-fork
1862@deffnx {C Function} scm_fork ()
7403e409 1863Creates a new ``child'' process by duplicating the current ``parent'' process.
a0e07ba4
NJ
1864In the child the return value is 0. In the parent the return value is
1865the integer process ID of the child.
1866
a796d0a9
AW
1867Note that it is unsafe to fork a process that has multiple threads
1868running, as only the thread that calls @code{primitive-fork} will
1869persist in the child. Any resources that other threads held, such as
1870locked mutexes or open file descriptors, are lost. Indeed, @acronym{POSIX}
1871specifies that only async-signal-safe procedures are safe to call after
1872a multithreaded fork, which is a very limited set. Guile issues a
1873warning if it detects a fork from a multi-threaded program.
1874
1875If you are going to @code{exec} soon after forking, the procedures in
1876@code{(ice-9 popen)} may be useful to you, as they fork and exec within
1877an async-signal-safe function carefully written to ensure robust program
1878behavior, even in the presence of threads. @xref{Pipes}, for more.
1879
a0e07ba4
NJ
1880This procedure has been renamed from @code{fork} to avoid a naming conflict
1881with the scsh fork.
1882@end deffn
1883
8f85c0c6
NJ
1884@deffn {Scheme Procedure} nice incr
1885@deffnx {C Function} scm_nice (incr)
f3dfb8ac 1886@cindex process priority
a0e07ba4
NJ
1887Increment the priority of the current process by @var{incr}. A higher
1888priority value means that the process runs less often.
1889The return value is unspecified.
1890@end deffn
1891
8f85c0c6
NJ
1892@deffn {Scheme Procedure} setpriority which who prio
1893@deffnx {C Function} scm_setpriority (which, who, prio)
2ce02471
NJ
1894@vindex PRIO_PROCESS
1895@vindex PRIO_PGRP
1896@vindex PRIO_USER
a0e07ba4
NJ
1897Set the scheduling priority of the process, process group
1898or user, as indicated by @var{which} and @var{who}. @var{which}
1899is one of the variables @code{PRIO_PROCESS}, @code{PRIO_PGRP}
1900or @code{PRIO_USER}, and @var{who} is interpreted relative to
1901@var{which} (a process identifier for @code{PRIO_PROCESS},
004fe2c8 1902process group identifier for @code{PRIO_PGRP}, and a user
a0e07ba4
NJ
1903identifier for @code{PRIO_USER}. A zero value of @var{who}
1904denotes the current process, process group, or user.
7403e409
NJ
1905@var{prio} is a value in the range [@minus{}20,20]. The default
1906priority is 0; lower priorities (in numerical terms) cause more
1907favorable scheduling. Sets the priority of all of the specified
1908processes. Only the super-user may lower priorities. The return
1909value is not specified.
a0e07ba4
NJ
1910@end deffn
1911
8f85c0c6
NJ
1912@deffn {Scheme Procedure} getpriority which who
1913@deffnx {C Function} scm_getpriority (which, who)
2ce02471
NJ
1914@vindex PRIO_PROCESS
1915@vindex PRIO_PGRP
1916@vindex PRIO_USER
a0e07ba4
NJ
1917Return the scheduling priority of the process, process group
1918or user, as indicated by @var{which} and @var{who}. @var{which}
1919is one of the variables @code{PRIO_PROCESS}, @code{PRIO_PGRP}
7403e409 1920or @code{PRIO_USER}, and @var{who} should be interpreted depending on
a0e07ba4
NJ
1921@var{which} (a process identifier for @code{PRIO_PROCESS},
1922process group identifier for @code{PRIO_PGRP}, and a user
7403e409 1923identifier for @code{PRIO_USER}). A zero value of @var{who}
a0e07ba4
NJ
1924denotes the current process, process group, or user. Return
1925the highest priority (lowest numerical value) of any of the
1926specified processes.
1927@end deffn
1928
fe613fe2
LC
1929@cindex affinity, CPU
1930
1931@deffn {Scheme Procedure} getaffinity pid
1932@deffnx {C Function} scm_getaffinity (pid)
1933Return a bitvector representing the CPU affinity mask for
1934process @var{pid}. Each CPU the process has affinity with
1935has its corresponding bit set in the returned bitvector.
1936The number of bits set is a good estimate of how many CPUs
1937Guile can use without stepping on other processes' toes.
1938
3ae78cac
LC
1939Currently this procedure is only defined on GNU variants
1940(@pxref{CPU Affinity, @code{sched_getaffinity},, libc, The
1941GNU C Library Reference Manual}).
fe613fe2
LC
1942@end deffn
1943
1944@deffn {Scheme Procedure} setaffinity pid mask
1945@deffnx {C Function} scm_setaffinity (pid, mask)
1946Install the CPU affinity mask @var{mask}, a bitvector, for
1947the process or thread with ID @var{pid}. The return value
1948is unspecified.
1949
3ae78cac
LC
1950Currently this procedure is only defined on GNU variants
1951(@pxref{CPU Affinity, @code{sched_setaffinity},, libc, The
1952GNU C Library Reference Manual}).
fe613fe2
LC
1953@end deffn
1954
f0c0141f
LC
1955@deffn {Scheme Procedure} total-processor-count
1956@deffnx {C Function} scm_total_processor_count ()
1957Return the total number of processors of the machine, which
1958is guaranteed to be at least 1. A ``processor'' here is a
1959thread execution unit, which can be either:
1960
1961@itemize
1962@item an execution core in a (possibly multi-core) chip, in a
1963 (possibly multi- chip) module, in a single computer, or
1964@item a thread execution unit inside a core in the case of
1965 @dfn{hyper-threaded} CPUs.
1966@end itemize
1967
1968Which of the two definitions is used, is unspecified.
1969@end deffn
1970
1971@deffn {Scheme Procedure} current-processor-count
1972@deffnx {C Function} scm_current_processor_count ()
1973Like @code{total-processor-count}, but return the number of
1974processors available to the current process. See
1975@code{setaffinity} and @code{getaffinity} for more
1976information.
1977@end deffn
1978
a0e07ba4
NJ
1979
1980@node Signals
3229f68b 1981@subsection Signals
f3dfb8ac 1982@cindex signal
a0e07ba4 1983
bf5df489
KR
1984The following procedures raise, handle and wait for signals.
1985
1986Scheme code signal handlers are run via a system async (@pxref{System
1987asyncs}), so they're called in the handler's thread at the next safe
1988opportunity. Generally this is after any currently executing
1989primitive procedure finishes (which could be a long time for
1990primitives that wait for an external event).
a0e07ba4 1991
8f85c0c6
NJ
1992@deffn {Scheme Procedure} kill pid sig
1993@deffnx {C Function} scm_kill (pid, sig)
a0e07ba4
NJ
1994Sends a signal to the specified process or group of processes.
1995
1996@var{pid} specifies the processes to which the signal is sent:
1997
7403e409 1998@table @asis
a0e07ba4
NJ
1999@item @var{pid} greater than 0
2000The process whose identifier is @var{pid}.
2001@item @var{pid} equal to 0
2002All processes in the current process group.
2003@item @var{pid} less than -1
2004The process group whose identifier is -@var{pid}
2005@item @var{pid} equal to -1
2006If the process is privileged, all processes except for some special
2007system processes. Otherwise, all processes with the current effective
2008user ID.
2009@end table
2010
2011@var{sig} should be specified using a variable corresponding to
2012the Unix symbolic name, e.g.,
2013
2014@defvar SIGHUP
2015Hang-up signal.
2016@end defvar
2017
2018@defvar SIGINT
2019Interrupt signal.
2020@end defvar
7403e409
NJ
2021
2022A full list of signals on the GNU system may be found in @ref{Standard
2023Signals,,,libc,The GNU C Library Reference Manual}.
a0e07ba4
NJ
2024@end deffn
2025
8f85c0c6
NJ
2026@deffn {Scheme Procedure} raise sig
2027@deffnx {C Function} scm_raise (sig)
a0e07ba4 2028Sends a specified signal @var{sig} to the current process, where
7403e409 2029@var{sig} is as described for the @code{kill} procedure.
a0e07ba4
NJ
2030@end deffn
2031
b6506f45 2032@deffn {Scheme Procedure} sigaction signum [handler [flags [thread]]]
8f85c0c6 2033@deffnx {C Function} scm_sigaction (signum, handler, flags)
b6506f45 2034@deffnx {C Function} scm_sigaction_for_thread (signum, handler, flags, thread)
a0e07ba4
NJ
2035Install or report the signal handler for a specified signal.
2036
2037@var{signum} is the signal number, which can be specified using the value
2038of variables such as @code{SIGINT}.
2039
b6506f45 2040If @var{handler} is omitted, @code{sigaction} returns a pair: the
7403e409
NJ
2041@acronym{CAR} is the current signal hander, which will be either an
2042integer with the value @code{SIG_DFL} (default action) or
2043@code{SIG_IGN} (ignore), or the Scheme procedure which handles the
2044signal, or @code{#f} if a non-Scheme procedure handles the signal.
2045The @acronym{CDR} contains the current @code{sigaction} flags for the
2046handler.
a0e07ba4 2047
b6506f45 2048If @var{handler} is provided, it is installed as the new handler for
0a50eeaa
NJ
2049@var{signum}. @var{handler} can be a Scheme procedure taking one
2050argument, or the value of @code{SIG_DFL} (default action) or
a0e07ba4 2051@code{SIG_IGN} (ignore), or @code{#f} to restore whatever signal handler
b6506f45
MV
2052was installed before @code{sigaction} was first used. When a scheme
2053procedure has been specified, that procedure will run in the given
2054@var{thread}. When no thread has been given, the thread that made this
2055call to @code{sigaction} is used.
2056
91f5e9f7
KR
2057@var{flags} is a @code{logior} (@pxref{Bitwise Operations}) of the
2058following (where provided by the system), or @code{0} for none.
2059
2060@defvar SA_NOCLDSTOP
2061By default, @code{SIGCHLD} is signalled when a child process stops
2062(ie.@: receives @code{SIGSTOP}), and when a child process terminates.
2063With the @code{SA_NOCLDSTOP} flag, @code{SIGCHLD} is only signalled
2064for termination, not stopping.
2065
2066@code{SA_NOCLDSTOP} has no effect on signals other than
2067@code{SIGCHLD}.
2068@end defvar
2069
2070@defvar SA_RESTART
2071If a signal occurs while in a system call, deliver the signal then
2072restart the system call (as opposed to returning an @code{EINTR} error
2073from that call).
91f5e9f7
KR
2074@end defvar
2075
2076The return value is a pair with information about the old handler as
2077described above.
a0e07ba4 2078
7403e409 2079This interface does not provide access to the ``signal blocking''
a0e07ba4
NJ
2080facility. Maybe this is not needed, since the thread support may
2081provide solutions to the problem of consistent access to data
2082structures.
2083@end deffn
2084
8f85c0c6
NJ
2085@deffn {Scheme Procedure} restore-signals
2086@deffnx {C Function} scm_restore_signals ()
a0e07ba4
NJ
2087Return all signal handlers to the values they had before any call to
2088@code{sigaction} was made. The return value is unspecified.
2089@end deffn
2090
8f85c0c6
NJ
2091@deffn {Scheme Procedure} alarm i
2092@deffnx {C Function} scm_alarm (i)
a0e07ba4
NJ
2093Set a timer to raise a @code{SIGALRM} signal after the specified
2094number of seconds (an integer). It's advisable to install a signal
2095handler for
2096@code{SIGALRM} beforehand, since the default action is to terminate
2097the process.
2098
2099The return value indicates the time remaining for the previous alarm,
2100if any. The new value replaces the previous alarm. If there was
2101no previous alarm, the return value is zero.
2102@end deffn
2103
8f85c0c6
NJ
2104@deffn {Scheme Procedure} pause
2105@deffnx {C Function} scm_pause ()
a0e07ba4
NJ
2106Pause the current process (thread?) until a signal arrives whose
2107action is to either terminate the current process or invoke a
2108handler procedure. The return value is unspecified.
2109@end deffn
2110
bf5df489
KR
2111@deffn {Scheme Procedure} sleep secs
2112@deffnx {Scheme Procedure} usleep usecs
2113@deffnx {C Function} scm_sleep (secs)
2114@deffnx {C Function} scm_usleep (usecs)
2115Wait the given period @var{secs} seconds or @var{usecs} microseconds
2116(both integers). If a signal arrives the wait stops and the return
2117value is the time remaining, in seconds or microseconds respectively.
2118If the period elapses with no signal the return is zero.
9401323e 2119
bf5df489
KR
2120On most systems the process scheduler is not microsecond accurate and
2121the actual period slept by @code{usleep} might be rounded to a system
2122clock tick boundary, which might be 10 milliseconds for instance.
9401323e 2123
bf5df489
KR
2124See @code{scm_std_sleep} and @code{scm_std_usleep} for equivalents at
2125the C level (@pxref{Blocking}).
a0e07ba4
NJ
2126@end deffn
2127
8f85c0c6 2128@deffn {Scheme Procedure} getitimer which_timer
bf5df489 2129@deffnx {Scheme Procedure} setitimer which_timer interval_seconds interval_microseconds periodic_seconds periodic_microseconds
8f85c0c6 2130@deffnx {C Function} scm_getitimer (which_timer)
bf5df489
KR
2131@deffnx {C Function} scm_setitimer (which_timer, interval_seconds, interval_microseconds, periodic_seconds, periodic_microseconds)
2132Get or set the periods programmed in certain system timers. These
2133timers have a current interval value which counts down and on reaching
2134zero raises a signal. An optional periodic value can be set to
2135restart from there each time, for periodic operation.
2136@var{which_timer} is one of the following values
2137
2138@defvar ITIMER_REAL
2139A real-time timer, counting down elapsed real time. At zero it raises
2140@code{SIGALRM}. This is like @code{alarm} above, but with a higher
2141resolution period.
2142@end defvar
2143
2144@defvar ITIMER_VIRTUAL
2145A virtual-time timer, counting down while the current process is
2146actually using CPU. At zero it raises @code{SIGVTALRM}.
2147@end defvar
2148
2149@defvar ITIMER_PROF
2150A profiling timer, counting down while the process is running (like
2151@code{ITIMER_VIRTUAL}) and also while system calls are running on the
2152process's behalf. At zero it raises a @code{SIGPROF}.
2153
2154This timer is intended for profiling where a program is spending its
2155time (by looking where it is when the timer goes off).
2156@end defvar
2157
2158@code{getitimer} returns the current timer value and its programmed
2159restart value, as a list containing two pairs. Each pair is a time in
2160seconds and microseconds: @code{((@var{interval_secs}
2161. @var{interval_usecs}) (@var{periodic_secs}
2162. @var{periodic_usecs}))}.
2163
2164@code{setitimer} sets the timer values similarly, in seconds and
2165microseconds (which must be integers). The periodic value can be zero
2166to have the timer run down just once. The return value is the timer's
2167previous setting, in the same form as @code{getitimer} returns.
9401323e 2168
bf5df489
KR
2169@example
2170(setitimer ITIMER_REAL
2171 5 500000 ;; first SIGALRM in 5.5 seconds time
2172 2 0) ;; then repeat every 2 seconds
2173@end example
9401323e 2174
bf5df489
KR
2175Although the timers are programmed in microseconds, the actual
2176accuracy might not be that high.
a0e07ba4
NJ
2177@end deffn
2178
2179
2180@node Terminals and Ptys
3229f68b 2181@subsection Terminals and Ptys
a0e07ba4 2182
8f85c0c6
NJ
2183@deffn {Scheme Procedure} isatty? port
2184@deffnx {C Function} scm_isatty_p (port)
f3dfb8ac 2185@cindex terminal
a0e07ba4
NJ
2186Return @code{#t} if @var{port} is using a serial non--file
2187device, otherwise @code{#f}.
2188@end deffn
2189
8f85c0c6
NJ
2190@deffn {Scheme Procedure} ttyname port
2191@deffnx {C Function} scm_ttyname (port)
f3dfb8ac 2192@cindex terminal
a0e07ba4
NJ
2193Return a string with the name of the serial terminal device
2194underlying @var{port}.
2195@end deffn
2196
8f85c0c6
NJ
2197@deffn {Scheme Procedure} ctermid
2198@deffnx {C Function} scm_ctermid ()
f3dfb8ac 2199@cindex terminal
a0e07ba4
NJ
2200Return a string containing the file name of the controlling
2201terminal for the current process.
2202@end deffn
2203
8f85c0c6
NJ
2204@deffn {Scheme Procedure} tcgetpgrp port
2205@deffnx {C Function} scm_tcgetpgrp (port)
f3dfb8ac 2206@cindex process group
a0e07ba4
NJ
2207Return the process group ID of the foreground process group
2208associated with the terminal open on the file descriptor
2209underlying @var{port}.
2210
2211If there is no foreground process group, the return value is a
2212number greater than 1 that does not match the process group ID
2213of any existing process group. This can happen if all of the
2214processes in the job that was formerly the foreground job have
2215terminated, and no other job has yet been moved into the
2216foreground.
2217@end deffn
2218
8f85c0c6
NJ
2219@deffn {Scheme Procedure} tcsetpgrp port pgid
2220@deffnx {C Function} scm_tcsetpgrp (port, pgid)
f3dfb8ac 2221@cindex process group
a0e07ba4
NJ
2222Set the foreground process group ID for the terminal used by the file
2223descriptor underlying @var{port} to the integer @var{pgid}.
2224The calling process
2225must be a member of the same session as @var{pgid} and must have the same
2226controlling terminal. The return value is unspecified.
2227@end deffn
2228
2229@node Pipes
3229f68b 2230@subsection Pipes
f3dfb8ac 2231@cindex pipe
a0e07ba4 2232
cb62d8e5 2233The following procedures are similar to the @code{popen} and
7403e409 2234@code{pclose} system routines. The code is in a separate ``popen''
df3d365a
LC
2235module@footnote{This module is only available on systems where the
2236@code{fork} feature is provided (@pxref{Common Feature Symbols}).}:
a0e07ba4 2237
aba0dff5 2238@lisp
a0e07ba4 2239(use-modules (ice-9 popen))
aba0dff5 2240@end lisp
a0e07ba4
NJ
2241
2242@findex popen
cb62d8e5
KR
2243@deffn {Scheme Procedure} open-pipe command mode
2244@deffnx {Scheme Procedure} open-pipe* mode prog [args...]
2245Execute a command in a subprocess, with a pipe to it or from it, or
2246with pipes in both directions.
2247
2248@code{open-pipe} runs the shell @var{command} using @samp{/bin/sh -c}.
2249@code{open-pipe*} executes @var{prog} directly, with the optional
2250@var{args} arguments (all strings).
2251
2252@var{mode} should be one of the following values. @code{OPEN_READ} is
2253an input pipe, ie.@: to read from the subprocess. @code{OPEN_WRITE}
2254is an output pipe, ie.@: to write to it.
2255
2256@defvar OPEN_READ
2257@defvarx OPEN_WRITE
2258@defvarx OPEN_BOTH
2259@end defvar
2260
2261For an input pipe, the child's standard output is the pipe and
2262standard input is inherited from @code{current-input-port}. For an
2263output pipe, the child's standard input is the pipe and standard
2264output is inherited from @code{current-output-port}. In all cases
2265cases the child's standard error is inherited from
2266@code{current-error-port} (@pxref{Default Ports}).
2267
2268If those @code{current-X-ports} are not files of some kind, and hence
2269don't have file descriptors for the child, then @file{/dev/null} is
2270used instead.
7064e449 2271
cb62d8e5
KR
2272Care should be taken with @code{OPEN_BOTH}, a deadlock will occur if
2273both parent and child are writing, and waiting until the write
2274completes before doing any reading. Each direction has
2275@code{PIPE_BUF} bytes of buffering (@pxref{Ports and File
2276Descriptors}), which will be enough for small writes, but not for say
2277putting a big file through a filter.
a0e07ba4
NJ
2278@end deffn
2279
8f85c0c6 2280@deffn {Scheme Procedure} open-input-pipe command
a0e07ba4 2281Equivalent to @code{open-pipe} with mode @code{OPEN_READ}.
bcf009c3
NJ
2282
2283@lisp
cb62d8e5
KR
2284(let* ((port (open-input-pipe "date --utc"))
2285 (str (read-line port)))
2286 (close-pipe port)
2287 str)
2288@result{} "Mon Mar 11 20:10:44 UTC 2002"
bcf009c3 2289@end lisp
a0e07ba4
NJ
2290@end deffn
2291
8f85c0c6 2292@deffn {Scheme Procedure} open-output-pipe command
a0e07ba4 2293Equivalent to @code{open-pipe} with mode @code{OPEN_WRITE}.
cb62d8e5
KR
2294
2295@lisp
2296(let ((port (open-output-pipe "lpr")))
2297 (display "Something for the line printer.\n" port)
2298 (if (not (eqv? 0 (status:exit-val (close-pipe port))))
2299 (error "Cannot print")))
2300@end lisp
a0e07ba4
NJ
2301@end deffn
2302
7064e449
MV
2303@deffn {Scheme Procedure} open-input-output-pipe command
2304Equivalent to @code{open-pipe} with mode @code{OPEN_BOTH}.
2305@end deffn
2306
a0e07ba4 2307@findex pclose
8f85c0c6 2308@deffn {Scheme Procedure} close-pipe port
cb62d8e5
KR
2309Close a pipe created by @code{open-pipe}, wait for the process to
2310terminate, and return the wait status code. The status is as per
2311@code{waitpid} and can be decoded with @code{status:exit-val} etc
2312(@pxref{Processes})
a0e07ba4
NJ
2313@end deffn
2314
cb62d8e5
KR
2315@sp 1
2316@code{waitpid WAIT_ANY} should not be used when pipes are open, since
2317it can reap a pipe's child process, causing an error from a subsequent
2318@code{close-pipe}.
2319
2320@code{close-port} (@pxref{Closing}) can close a pipe, but it doesn't
2321reap the child process.
2322
2323The garbage collector will close a pipe no longer in use, and reap the
2324child process with @code{waitpid}. If the child hasn't yet terminated
2325the garbage collector doesn't block, but instead checks again in the
2326next GC.
2327
2328Many systems have per-user and system-wide limits on the number of
2329processes, and a system-wide limit on the number of pipes, so pipes
2330should be closed explicitly when no longer needed, rather than letting
2331the garbage collector pick them up at some later time.
2332
2333
a0e07ba4 2334@node Networking
3229f68b 2335@subsection Networking
f3dfb8ac 2336@cindex network
a0e07ba4
NJ
2337
2338@menu
13ed23db
KR
2339* Network Address Conversion::
2340* Network Databases::
2341* Network Socket Address::
2342* Network Sockets and Communication::
2343* Internet Socket Examples::
a0e07ba4
NJ
2344@end menu
2345
2346@node Network Address Conversion
3229f68b 2347@subsubsection Network Address Conversion
f3dfb8ac 2348@cindex network address
a0e07ba4
NJ
2349
2350This section describes procedures which convert internet addresses
2351between numeric and string formats.
2352
3229f68b 2353@subsubheading IPv4 Address Conversion
f3dfb8ac 2354@cindex IPv4
a0e07ba4 2355
957f9f62 2356An IPv4 Internet address is a 4-byte value, represented in Guile as an
99d16776
KR
2357integer in host byte order, so that say ``0.0.0.1'' is 1, or
2358``1.0.0.0'' is 16777216.
2359
2360Some underlying C functions use network byte order for addresses,
2361Guile converts as necessary so that at the Scheme level its host byte
2362order everywhere.
957f9f62 2363
13ed23db
KR
2364@defvar INADDR_ANY
2365For a server, this can be used with @code{bind} (@pxref{Network
2366Sockets and Communication}) to allow connections from any interface on
2367the machine.
957f9f62
KR
2368@end defvar
2369
2370@defvar INADDR_BROADCAST
2371The broadcast address on the local network.
2372@end defvar
2373
13ed23db
KR
2374@defvar INADDR_LOOPBACK
2375The address of the local host using the loopback device, ie.@:
2376@samp{127.0.0.1}.
2377@end defvar
2378
957f9f62
KR
2379@c INADDR_NONE is defined in the code, but serves no purpose.
2380@c inet_addr() returns it as an error indication, but that function
2381@c isn't provided, for the good reason that inet_aton() does the same
2382@c job and gives an unambiguous error indication. (INADDR_NONE is a
2383@c valid 4-byte value, in glibc it's the same as INADDR_BROADCAST.)
2384@c
2385@c @defvar INADDR_NONE
2386@c No address.
2387@c @end defvar
2388
8f85c0c6
NJ
2389@deffn {Scheme Procedure} inet-aton address
2390@deffnx {C Function} scm_inet_aton (address)
3452e666
LC
2391This function is deprecated in favor of @code{inet-pton}.
2392
a0e07ba4
NJ
2393Convert an IPv4 Internet address from printable string
2394(dotted decimal notation) to an integer. E.g.,
2395
2396@lisp
2397(inet-aton "127.0.0.1") @result{} 2130706433
2398@end lisp
2399@end deffn
2400
8f85c0c6
NJ
2401@deffn {Scheme Procedure} inet-ntoa inetid
2402@deffnx {C Function} scm_inet_ntoa (inetid)
3452e666
LC
2403This function is deprecated in favor of @code{inet-ntop}.
2404
a0e07ba4
NJ
2405Convert an IPv4 Internet address to a printable
2406(dotted decimal notation) string. E.g.,
2407
2408@lisp
2409(inet-ntoa 2130706433) @result{} "127.0.0.1"
2410@end lisp
2411@end deffn
2412
8f85c0c6
NJ
2413@deffn {Scheme Procedure} inet-netof address
2414@deffnx {C Function} scm_inet_netof (address)
a0e07ba4
NJ
2415Return the network number part of the given IPv4
2416Internet address. E.g.,
2417
2418@lisp
2419(inet-netof 2130706433) @result{} 127
2420@end lisp
2421@end deffn
2422
8f85c0c6
NJ
2423@deffn {Scheme Procedure} inet-lnaof address
2424@deffnx {C Function} scm_lnaof (address)
a0e07ba4
NJ
2425Return the local-address-with-network part of the given
2426IPv4 Internet address, using the obsolete class A/B/C system.
2427E.g.,
2428
2429@lisp
2430(inet-lnaof 2130706433) @result{} 1
2431@end lisp
2432@end deffn
2433
8f85c0c6
NJ
2434@deffn {Scheme Procedure} inet-makeaddr net lna
2435@deffnx {C Function} scm_inet_makeaddr (net, lna)
a0e07ba4
NJ
2436Make an IPv4 Internet address by combining the network number
2437@var{net} with the local-address-within-network number
2438@var{lna}. E.g.,
2439
2440@lisp
2441(inet-makeaddr 127 1) @result{} 2130706433
2442@end lisp
2443@end deffn
2444
3229f68b 2445@subsubheading IPv6 Address Conversion
f3dfb8ac 2446@cindex IPv6
a0e07ba4 2447
99d16776
KR
2448An IPv6 Internet address is a 16-byte value, represented in Guile as
2449an integer in host byte order, so that say ``::1'' is 1.
2450
8f85c0c6
NJ
2451@deffn {Scheme Procedure} inet-ntop family address
2452@deffnx {C Function} scm_inet_ntop (family, address)
99d16776 2453Convert a network address from an integer to a printable string.
a0e07ba4
NJ
2454@var{family} can be @code{AF_INET} or @code{AF_INET6}. E.g.,
2455
2456@lisp
2457(inet-ntop AF_INET 2130706433) @result{} "127.0.0.1"
187a4390
NJ
2458(inet-ntop AF_INET6 (- (expt 2 128) 1))
2459 @result{} "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
a0e07ba4
NJ
2460@end lisp
2461@end deffn
2462
8f85c0c6
NJ
2463@deffn {Scheme Procedure} inet-pton family address
2464@deffnx {C Function} scm_inet_pton (family, address)
99d16776
KR
2465Convert a string containing a printable network address to an integer
2466address. @var{family} can be @code{AF_INET} or @code{AF_INET6}.
2467E.g.,
a0e07ba4
NJ
2468
2469@lisp
2470(inet-pton AF_INET "127.0.0.1") @result{} 2130706433
2471(inet-pton AF_INET6 "::1") @result{} 1
2472@end lisp
2473@end deffn
2474
2475
2476@node Network Databases
3229f68b 2477@subsubsection Network Databases
f3dfb8ac 2478@cindex network database
a0e07ba4
NJ
2479
2480This section describes procedures which query various network databases.
2481Care should be taken when using the database routines since they are not
2482reentrant.
2483
55ae00ea
LC
2484@subsubheading @code{getaddrinfo}
2485
2486@cindex @code{addrinfo} object type
2487@cindex host name lookup
2488@cindex service name lookup
2489
2490The @code{getaddrinfo} procedure maps host and service names to socket addresses
2491and associated information in a protocol-independent way.
2492
2493@deffn {Scheme Procedure} getaddrinfo name service [hint_flags [hint_family [hint_socktype [hint_protocol]]]]
2494@deffnx {C Function} scm_getaddrinfo (name, service, hint_flags, hint_family, hint_socktype, hint_protocol)
2495Return a list of @code{addrinfo} structures containing
2496a socket address and associated information for host @var{name}
2497and/or @var{service} to be used in creating a socket with
2498which to address the specified service.
2499
2500@example
2501(let* ((ai (car (getaddrinfo "www.gnu.org" "http")))
2502 (s (socket (addrinfo:fam ai) (addrinfo:socktype ai)
d2add8ae 2503 (addrinfo:protocol ai))))
55ae00ea
LC
2504 (connect s (addrinfo:addr ai))
2505 s)
2506@end example
2507
2508When @var{service} is omitted or is @code{#f}, return
2509network-level addresses for @var{name}. When @var{name}
2510is @code{#f} @var{service} must be provided and service
2511locations local to the caller are returned.
2512
2513Additional hints can be provided. When specified,
2514@var{hint_flags} should be a bitwise-or of zero or more
2515constants among the following:
2516
2517@table @code
2518@item AI_PASSIVE
2519Socket address is intended for @code{bind}.
2520
2521@item AI_CANONNAME
2522Request for canonical host name, available via
2523@code{addrinfo:canonname}. This makes sense mainly when
2524DNS lookups are involved.
2525
2526@item AI_NUMERICHOST
2527Specifies that @var{name} is a numeric host address string
2528(e.g., @code{"127.0.0.1"}), meaning that name resolution
2529will not be used.
2530
2531@item AI_NUMERICSERV
2532Likewise, specifies that @var{service} is a numeric port
2533string (e.g., @code{"80"}).
2534
2535@item AI_ADDRCONFIG
2536Return only addresses configured on the local system It is
2537highly recommended to provide this flag when the returned
2538socket addresses are to be used to make connections;
2539otherwise, some of the returned addresses could be unreachable
2540or use a protocol that is not supported.
2541
2542@item AI_V4MAPPED
2543When looking up IPv6 addresses, return mapped IPv4 addresses if
2544there is no IPv6 address available at all.
2545
2546@item AI_ALL
2547If this flag is set along with @code{AI_V4MAPPED} when looking up IPv6
2548addresses, return all IPv6 addresses as well as all IPv4 addresses, the latter
2549mapped to IPv6 format.
2550@end table
2551
2552When given, @var{hint_family} should specify the requested
2553address family, e.g., @code{AF_INET6}. Similarly,
2554@var{hint_socktype} should specify the requested socket type
2555(e.g., @code{SOCK_DGRAM}), and @var{hint_protocol} should
ecb87335 2556specify the requested protocol (its value is interpreted
55ae00ea
LC
2557as in calls to @code{socket}).
2558
2559On error, an exception with key @code{getaddrinfo-error} is
2560thrown, with an error code (an integer) as its argument:
2561
2562@example
2563(catch 'getaddrinfo-error
2564 (lambda ()
2565 (getaddrinfo "www.gnu.org" "gopher"))
2566 (lambda (key errcode)
2567 (cond ((= errcode EAI_SERVICE)
2568 (display "doesn't know about Gopher!\n"))
2569 ((= errcode EAI_NONAME)
2570 (display "www.gnu.org not found\\n"))
2571 (else
2572 (format #t "something wrong: ~a\n"
2573 (gai-strerror errcode))))))
2574@end example
2575
2576Error codes are:
2577
2578@table @code
2579@item EAI_AGAIN
2580The name or service could not be resolved at this time. Future
2581attempts may succeed.
2582
2583@item EAI_BADFLAGS
2584@var{hint_flags} contains an invalid value.
2585
2586@item EAI_FAIL
2587A non-recoverable error occurred when attempting to
2588resolve the name.
2589
2590@item EAI_FAMILY
2591@var{hint_family} was not recognized.
2592
2593@item EAI_NONAME
2594Either @var{name} does not resolve for the supplied parameters,
2595or neither @var{name} nor @var{service} were supplied.
2596
66d86131 2597@item EAI_NODATA
1ba05158
LC
2598This non-POSIX error code can be returned on some systems (GNU
2599and Darwin, at least), for example when @var{name} is known
2600but requests that were made turned out no data. Error handling
66d86131
LC
2601code should be prepared to handle it when it is defined.
2602
55ae00ea
LC
2603@item EAI_SERVICE
2604@var{service} was not recognized for the specified socket type.
2605
2606@item EAI_SOCKTYPE
2607@var{hint_socktype} was not recognized.
2608
2609@item EAI_SYSTEM
5bb40f9d
LC
2610A system error occurred. In C, the error code can be found in
2611@code{errno}; this value is not accessible from Scheme, but in
2612practice it provides little information about the actual error
2613cause.
2614@c See <http://bugs.gnu.org/13958>.
55ae00ea
LC
2615@end table
2616
2617Users are encouraged to read the
2618@url{http://www.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html,
2619"POSIX specification} for more details.
2620@end deffn
2621
2622The following procedures take an @code{addrinfo} object as returned by
2623@code{getaddrinfo}:
2624
2625@deffn {Scheme Procedure} addrinfo:flags ai
2626Return flags for @var{ai} as a bitwise or of @code{AI_} values (see above).
2627@end deffn
2628
2629@deffn {Scheme Procedure} addrinfo:fam ai
2630Return the address family of @var{ai} (a @code{AF_} value).
2631@end deffn
2632
2633@deffn {Scheme Procedure} addrinfo:socktype ai
2634Return the socket type for @var{ai} (a @code{SOCK_} value).
2635@end deffn
2636
2637@deffn {Scheme Procedure} addrinfo:protocol ai
2638Return the protocol of @var{ai}.
2639@end deffn
2640
2641@deffn {Scheme Procedure} addrinfo:addr ai
2642Return the socket address associated with @var{ai} as a @code{sockaddr}
2643object (@pxref{Network Socket Address}).
2644@end deffn
2645
2646@deffn {Scheme Procedure} addrinfo:canonname ai
2647Return a string for the canonical name associated with @var{ai} if
2648the @code{AI_CANONNAME} flag was supplied.
2649@end deffn
2650
3229f68b 2651@subsubheading The Host Database
f3dfb8ac
KR
2652@cindex @file{/etc/hosts}
2653@cindex network database
a0e07ba4
NJ
2654
2655A @dfn{host object} is a structure that represents what is known about a
2656network host, and is the usual way of representing a system's network
2657identity inside software.
2658
2659The following functions accept a host object and return a selected
2660component:
2661
8f85c0c6 2662@deffn {Scheme Procedure} hostent:name host
7403e409 2663The ``official'' hostname for @var{host}.
a0e07ba4 2664@end deffn
8f85c0c6 2665@deffn {Scheme Procedure} hostent:aliases host
a0e07ba4
NJ
2666A list of aliases for @var{host}.
2667@end deffn
8f85c0c6 2668@deffn {Scheme Procedure} hostent:addrtype host
99d16776
KR
2669The host address type, one of the @code{AF} constants, such as
2670@code{AF_INET} or @code{AF_INET6}.
a0e07ba4 2671@end deffn
8f85c0c6 2672@deffn {Scheme Procedure} hostent:length host
a0e07ba4
NJ
2673The length of each address for @var{host}, in bytes.
2674@end deffn
8f85c0c6 2675@deffn {Scheme Procedure} hostent:addr-list host
99d16776
KR
2676The list of network addresses associated with @var{host}. For
2677@code{AF_INET} these are integer IPv4 address (@pxref{Network Address
2678Conversion}).
a0e07ba4
NJ
2679@end deffn
2680
55ae00ea
LC
2681The following procedures can be used to search the host database. However,
2682@code{getaddrinfo} should be preferred over them since it's more generic and
2683thread-safe.
a0e07ba4 2684
8f85c0c6
NJ
2685@deffn {Scheme Procedure} gethost [host]
2686@deffnx {Scheme Procedure} gethostbyname hostname
2687@deffnx {Scheme Procedure} gethostbyaddr address
2688@deffnx {C Function} scm_gethost (host)
a0e07ba4
NJ
2689Look up a host by name or address, returning a host object. The
2690@code{gethost} procedure will accept either a string name or an integer
2691address; if given no arguments, it behaves like @code{gethostent} (see
2692below). If a name or address is supplied but the address can not be
2693found, an error will be thrown to one of the keys:
2694@code{host-not-found}, @code{try-again}, @code{no-recovery} or
2695@code{no-data}, corresponding to the equivalent @code{h_error} values.
2696Unusual conditions may result in errors thrown to the
2697@code{system-error} or @code{misc_error} keys.
bcf009c3
NJ
2698
2699@lisp
2700(gethost "www.gnu.org")
2701@result{} #("www.gnu.org" () 2 4 (3353880842))
2702
2703(gethostbyname "www.emacs.org")
2704@result{} #("emacs.org" ("www.emacs.org") 2 4 (1073448978))
2705@end lisp
a0e07ba4
NJ
2706@end deffn
2707
2708The following procedures may be used to step through the host
2709database from beginning to end.
2710
8f85c0c6 2711@deffn {Scheme Procedure} sethostent [stayopen]
a0e07ba4
NJ
2712Initialize an internal stream from which host objects may be read. This
2713procedure must be called before any calls to @code{gethostent}, and may
2714also be called afterward to reset the host entry stream. If
2715@var{stayopen} is supplied and is not @code{#f}, the database is not
2716closed by subsequent @code{gethostbyname} or @code{gethostbyaddr} calls,
2717possibly giving an efficiency gain.
2718@end deffn
2719
8f85c0c6 2720@deffn {Scheme Procedure} gethostent
a0e07ba4
NJ
2721Return the next host object from the host database, or @code{#f} if
2722there are no more hosts to be found (or an error has been encountered).
2723This procedure may not be used before @code{sethostent} has been called.
2724@end deffn
2725
8f85c0c6 2726@deffn {Scheme Procedure} endhostent
a0e07ba4
NJ
2727Close the stream used by @code{gethostent}. The return value is unspecified.
2728@end deffn
2729
8f85c0c6
NJ
2730@deffn {Scheme Procedure} sethost [stayopen]
2731@deffnx {C Function} scm_sethost (stayopen)
a0e07ba4
NJ
2732If @var{stayopen} is omitted, this is equivalent to @code{endhostent}.
2733Otherwise it is equivalent to @code{sethostent stayopen}.
2734@end deffn
3229f68b
MV
2735
2736@subsubheading The Network Database
f3dfb8ac 2737@cindex network database
a0e07ba4
NJ
2738
2739The following functions accept an object representing a network
2740and return a selected component:
2741
8f85c0c6 2742@deffn {Scheme Procedure} netent:name net
7403e409 2743The ``official'' network name.
a0e07ba4 2744@end deffn
8f85c0c6 2745@deffn {Scheme Procedure} netent:aliases net
a0e07ba4
NJ
2746A list of aliases for the network.
2747@end deffn
8f85c0c6 2748@deffn {Scheme Procedure} netent:addrtype net
a0e07ba4
NJ
2749The type of the network number. Currently, this returns only
2750@code{AF_INET}.
2751@end deffn
8f85c0c6 2752@deffn {Scheme Procedure} netent:net net
a0e07ba4
NJ
2753The network number.
2754@end deffn
2755
2756The following procedures are used to search the network database:
2757
8f85c0c6
NJ
2758@deffn {Scheme Procedure} getnet [net]
2759@deffnx {Scheme Procedure} getnetbyname net-name
2760@deffnx {Scheme Procedure} getnetbyaddr net-number
2761@deffnx {C Function} scm_getnet (net)
a0e07ba4
NJ
2762Look up a network by name or net number in the network database. The
2763@var{net-name} argument must be a string, and the @var{net-number}
2764argument must be an integer. @code{getnet} will accept either type of
2765argument, behaving like @code{getnetent} (see below) if no arguments are
2766given.
2767@end deffn
2768
2769The following procedures may be used to step through the network
2770database from beginning to end.
2771
8f85c0c6 2772@deffn {Scheme Procedure} setnetent [stayopen]
a0e07ba4
NJ
2773Initialize an internal stream from which network objects may be read. This
2774procedure must be called before any calls to @code{getnetent}, and may
2775also be called afterward to reset the net entry stream. If
2776@var{stayopen} is supplied and is not @code{#f}, the database is not
2777closed by subsequent @code{getnetbyname} or @code{getnetbyaddr} calls,
2778possibly giving an efficiency gain.
2779@end deffn
2780
8f85c0c6 2781@deffn {Scheme Procedure} getnetent
a0e07ba4
NJ
2782Return the next entry from the network database.
2783@end deffn
2784
8f85c0c6 2785@deffn {Scheme Procedure} endnetent
a0e07ba4
NJ
2786Close the stream used by @code{getnetent}. The return value is unspecified.
2787@end deffn
2788
8f85c0c6
NJ
2789@deffn {Scheme Procedure} setnet [stayopen]
2790@deffnx {C Function} scm_setnet (stayopen)
a0e07ba4
NJ
2791If @var{stayopen} is omitted, this is equivalent to @code{endnetent}.
2792Otherwise it is equivalent to @code{setnetent stayopen}.
2793@end deffn
2794
3229f68b 2795@subsubheading The Protocol Database
f3dfb8ac
KR
2796@cindex @file{/etc/protocols}
2797@cindex protocols
2798@cindex network protocols
a0e07ba4
NJ
2799
2800The following functions accept an object representing a protocol
2801and return a selected component:
2802
8f85c0c6 2803@deffn {Scheme Procedure} protoent:name protocol
7403e409 2804The ``official'' protocol name.
a0e07ba4 2805@end deffn
8f85c0c6 2806@deffn {Scheme Procedure} protoent:aliases protocol
a0e07ba4
NJ
2807A list of aliases for the protocol.
2808@end deffn
8f85c0c6 2809@deffn {Scheme Procedure} protoent:proto protocol
a0e07ba4
NJ
2810The protocol number.
2811@end deffn
2812
2813The following procedures are used to search the protocol database:
2814
8f85c0c6
NJ
2815@deffn {Scheme Procedure} getproto [protocol]
2816@deffnx {Scheme Procedure} getprotobyname name
2817@deffnx {Scheme Procedure} getprotobynumber number
2818@deffnx {C Function} scm_getproto (protocol)
a0e07ba4
NJ
2819Look up a network protocol by name or by number. @code{getprotobyname}
2820takes a string argument, and @code{getprotobynumber} takes an integer
2821argument. @code{getproto} will accept either type, behaving like
2822@code{getprotoent} (see below) if no arguments are supplied.
2823@end deffn
2824
2825The following procedures may be used to step through the protocol
2826database from beginning to end.
2827
8f85c0c6 2828@deffn {Scheme Procedure} setprotoent [stayopen]
a0e07ba4
NJ
2829Initialize an internal stream from which protocol objects may be read. This
2830procedure must be called before any calls to @code{getprotoent}, and may
2831also be called afterward to reset the protocol entry stream. If
2832@var{stayopen} is supplied and is not @code{#f}, the database is not
2833closed by subsequent @code{getprotobyname} or @code{getprotobynumber} calls,
2834possibly giving an efficiency gain.
2835@end deffn
2836
8f85c0c6 2837@deffn {Scheme Procedure} getprotoent
a0e07ba4
NJ
2838Return the next entry from the protocol database.
2839@end deffn
2840
8f85c0c6 2841@deffn {Scheme Procedure} endprotoent
a0e07ba4
NJ
2842Close the stream used by @code{getprotoent}. The return value is unspecified.
2843@end deffn
2844
8f85c0c6
NJ
2845@deffn {Scheme Procedure} setproto [stayopen]
2846@deffnx {C Function} scm_setproto (stayopen)
a0e07ba4
NJ
2847If @var{stayopen} is omitted, this is equivalent to @code{endprotoent}.
2848Otherwise it is equivalent to @code{setprotoent stayopen}.
2849@end deffn
2850
3229f68b 2851@subsubheading The Service Database
f3dfb8ac
KR
2852@cindex @file{/etc/services}
2853@cindex services
2854@cindex network services
a0e07ba4
NJ
2855
2856The following functions accept an object representing a service
2857and return a selected component:
2858
8f85c0c6 2859@deffn {Scheme Procedure} servent:name serv
7403e409 2860The ``official'' name of the network service.
a0e07ba4 2861@end deffn
8f85c0c6 2862@deffn {Scheme Procedure} servent:aliases serv
a0e07ba4
NJ
2863A list of aliases for the network service.
2864@end deffn
8f85c0c6 2865@deffn {Scheme Procedure} servent:port serv
a0e07ba4
NJ
2866The Internet port used by the service.
2867@end deffn
8f85c0c6 2868@deffn {Scheme Procedure} servent:proto serv
a0e07ba4
NJ
2869The protocol used by the service. A service may be listed many times
2870in the database under different protocol names.
2871@end deffn
2872
2873The following procedures are used to search the service database:
2874
8f85c0c6
NJ
2875@deffn {Scheme Procedure} getserv [name [protocol]]
2876@deffnx {Scheme Procedure} getservbyname name protocol
2877@deffnx {Scheme Procedure} getservbyport port protocol
2878@deffnx {C Function} scm_getserv (name, protocol)
a0e07ba4
NJ
2879Look up a network service by name or by service number, and return a
2880network service object. The @var{protocol} argument specifies the name
2881of the desired protocol; if the protocol found in the network service
2882database does not match this name, a system error is signalled.
2883
2884The @code{getserv} procedure will take either a service name or number
2885as its first argument; if given no arguments, it behaves like
2886@code{getservent} (see below).
bcf009c3
NJ
2887
2888@lisp
2889(getserv "imap" "tcp")
2890@result{} #("imap2" ("imap") 143 "tcp")
2891
2892(getservbyport 88 "udp")
2893@result{} #("kerberos" ("kerberos5" "krb5") 88 "udp")
2894@end lisp
a0e07ba4
NJ
2895@end deffn
2896
2897The following procedures may be used to step through the service
2898database from beginning to end.
2899
8f85c0c6 2900@deffn {Scheme Procedure} setservent [stayopen]
a0e07ba4
NJ
2901Initialize an internal stream from which service objects may be read. This
2902procedure must be called before any calls to @code{getservent}, and may
2903also be called afterward to reset the service entry stream. If
2904@var{stayopen} is supplied and is not @code{#f}, the database is not
2905closed by subsequent @code{getservbyname} or @code{getservbyport} calls,
2906possibly giving an efficiency gain.
2907@end deffn
2908
8f85c0c6 2909@deffn {Scheme Procedure} getservent
a0e07ba4
NJ
2910Return the next entry from the services database.
2911@end deffn
2912
8f85c0c6 2913@deffn {Scheme Procedure} endservent
a0e07ba4
NJ
2914Close the stream used by @code{getservent}. The return value is unspecified.
2915@end deffn
2916
8f85c0c6
NJ
2917@deffn {Scheme Procedure} setserv [stayopen]
2918@deffnx {C Function} scm_setserv (stayopen)
a0e07ba4
NJ
2919If @var{stayopen} is omitted, this is equivalent to @code{endservent}.
2920Otherwise it is equivalent to @code{setservent stayopen}.
2921@end deffn
2922
13ed23db
KR
2923
2924@node Network Socket Address
2925@subsubsection Network Socket Address
32ff7370
KR
2926@cindex socket address
2927@cindex network socket address
2928@tpindex Socket address
2929
2930A @dfn{socket address} object identifies a socket endpoint for
2931communication. In the case of @code{AF_INET} for instance, the socket
2932address object comprises the host address (or interface on the host)
2933and a port number which specifies a particular open socket in a
2934running client or server process. A socket address object can be
2935created with,
2936
2937@deffn {Scheme Procedure} make-socket-address AF_INET ipv4addr port
2938@deffnx {Scheme Procedure} make-socket-address AF_INET6 ipv6addr port [flowinfo [scopeid]]
2939@deffnx {Scheme Procedure} make-socket-address AF_UNIX path
5f6ffd66 2940@deffnx {C Function} scm_make_socket_address (family, address, arglist)
13ed23db
KR
2941Return a new socket address object. The first argument is the address
2942family, one of the @code{AF} constants, then the arguments vary
2943according to the family.
2944
2945For @code{AF_INET} the arguments are an IPv4 network address number
32ff7370 2946(@pxref{Network Address Conversion}), and a port number.
13ed23db
KR
2947
2948For @code{AF_INET6} the arguments are an IPv6 network address number
2949and a port number. Optional @var{flowinfo} and @var{scopeid}
2950arguments may be given (both integers, default 0).
2951
2952For @code{AF_UNIX} the argument is a filename (a string).
32ff7370
KR
2953
2954The C function @code{scm_make_socket_address} takes the @var{family}
2955and @var{address} arguments directly, then @var{arglist} is a list of
2956further arguments, being the port for IPv4, port and optional flowinfo
2957and scopeid for IPv6, or the empty list @code{SCM_EOL} for Unix
2958domain.
2959@end deffn
13ed23db
KR
2960
2961@noindent
2962The following functions access the fields of a socket address object,
2963
2964@deffn {Scheme Procedure} sockaddr:fam sa
2965Return the address family from socket address object @var{sa}. This
679cceed 2966is one of the @code{AF} constants (e.g.@: @code{AF_INET}).
13ed23db
KR
2967@end deffn
2968
2969@deffn {Scheme Procedure} sockaddr:path sa
2970For an @code{AF_UNIX} socket address object @var{sa}, return the
2971filename.
2972@end deffn
2973
2974@deffn {Scheme Procedure} sockaddr:addr sa
2975For an @code{AF_INET} or @code{AF_INET6} socket address object
2976@var{sa}, return the network address number.
2977@end deffn
2978
2979@deffn {Scheme Procedure} sockaddr:port sa
2980For an @code{AF_INET} or @code{AF_INET6} socket address object
2981@var{sa}, return the port number.
2982@end deffn
2983
2984@deffn {Scheme Procedure} sockaddr:flowinfo sa
2985For an @code{AF_INET6} socket address object @var{sa}, return the
2986flowinfo value.
2987@end deffn
2988
2989@deffn {Scheme Procedure} sockaddr:scopeid sa
2990For an @code{AF_INET6} socket address object @var{sa}, return the
2991scope ID value.
2992@end deffn
2993
32ff7370
KR
2994@tpindex @code{struct sockaddr}
2995@tpindex @code{sockaddr}
2996The functions below convert to and from the C @code{struct sockaddr}
2997(@pxref{Address Formats,,, libc, The GNU C Library Reference Manual}).
2998That structure is a generic type, an application can cast to or from
2999@code{struct sockaddr_in}, @code{struct sockaddr_in6} or @code{struct
3000sockaddr_un} according to the address family.
3001
3002In a @code{struct sockaddr} taken or returned, the byte ordering in
3003the fields follows the C conventions (@pxref{Byte Order,, Byte Order
3004Conversion, libc, The GNU C Library Reference Manual}). This means
3005network byte order for @code{AF_INET} host address
3006(@code{sin_addr.s_addr}) and port number (@code{sin_port}), and
3007@code{AF_INET6} port number (@code{sin6_port}). But at the Scheme
3008level these values are taken or returned in host byte order, so the
3009port is an ordinary integer, and the host address likewise is an
3010ordinary integer (as described in @ref{Network Address Conversion}).
3011
3012@deftypefn {C Function} {struct sockaddr *} scm_c_make_socket_address (SCM family, SCM address, SCM args, size_t *outsize)
3013Return a newly-@code{malloc}ed @code{struct sockaddr} created from
3014arguments like those taken by @code{scm_make_socket_address} above.
3015
3016The size (in bytes) of the @code{struct sockaddr} return is stored
3017into @code{*@var{outsize}}. An application must call @code{free} to
3018release the returned structure when no longer required.
3019@end deftypefn
3020
3021@deftypefn {C Function} SCM scm_from_sockaddr (const struct sockaddr *address, unsigned address_size)
3022Return a Scheme socket address object from the C @var{address}
3023structure. @var{address_size} is the size in bytes of @var{address}.
3024@end deftypefn
3025
3026@deftypefn {C Function} {struct sockaddr *} scm_to_sockaddr (SCM address, size_t *address_size)
3027Return a newly-@code{malloc}ed @code{struct sockaddr} from a Scheme
3028level socket address object.
3029
3030The size (in bytes) of the @code{struct sockaddr} return is stored
3031into @code{*@var{outsize}}. An application must call @code{free} to
3032release the returned structure when no longer required.
3033@end deftypefn
3034
13ed23db 3035
a0e07ba4 3036@node Network Sockets and Communication
3229f68b 3037@subsubsection Network Sockets and Communication
f3dfb8ac
KR
3038@cindex socket
3039@cindex network socket
a0e07ba4
NJ
3040
3041Socket ports can be created using @code{socket} and @code{socketpair}.
3042The ports are initially unbuffered, to make reading and writing to the
3043same port more reliable. A buffer can be added to the port using
7403e409 3044@code{setvbuf}; see @ref{Ports and File Descriptors}.
a0e07ba4 3045
9e996fb1
KR
3046Most systems have limits on how many files and sockets can be open, so
3047it's strongly recommended that socket ports be closed explicitly when
3048no longer required (@pxref{Ports}).
3049
99d16776
KR
3050Some of the underlying C functions take values in network byte order,
3051but the convention in Guile is that at the Scheme level everything is
3052ordinary host byte order and conversions are made automatically where
3053necessary.
a0e07ba4 3054
8f85c0c6
NJ
3055@deffn {Scheme Procedure} socket family style proto
3056@deffnx {C Function} scm_socket (family, style, proto)
a0e07ba4 3057Return a new socket port of the type specified by @var{family},
3dba2dd9
KR
3058@var{style} and @var{proto}. All three parameters are integers. The
3059possible values for @var{family} are as follows, where supported by
3060the system,
3061
3062@defvar PF_UNIX
3063@defvarx PF_INET
3064@defvarx PF_INET6
3065@end defvar
3066
3067The possible values for @var{style} are as follows, again where
3068supported by the system,
3069
3070@defvar SOCK_STREAM
3071@defvarx SOCK_DGRAM
3072@defvarx SOCK_RAW
0bd094c2
KR
3073@defvarx SOCK_RDM
3074@defvarx SOCK_SEQPACKET
3dba2dd9 3075@end defvar
a0e07ba4
NJ
3076
3077@var{proto} can be obtained from a protocol name using
3dba2dd9
KR
3078@code{getprotobyname} (@pxref{Network Databases}). A value of zero
3079means the default protocol, which is usually right.
a0e07ba4 3080
3dba2dd9
KR
3081A socket cannot by used for communication until it has been connected
3082somewhere, usually with either @code{connect} or @code{accept} below.
a0e07ba4
NJ
3083@end deffn
3084
8f85c0c6
NJ
3085@deffn {Scheme Procedure} socketpair family style proto
3086@deffnx {C Function} scm_socketpair (family, style, proto)
497cbe20
KR
3087Return a pair, the @code{car} and @code{cdr} of which are two unnamed
3088socket ports connected to each other. The connection is full-duplex,
3089so data can be transferred in either direction between the two.
3090
3091@var{family}, @var{style} and @var{proto} are as per @code{socket}
3092above. But many systems only support socket pairs in the
3093@code{PF_UNIX} family. Zero is likely to be the only meaningful value
3094for @var{proto}.
a0e07ba4
NJ
3095@end deffn
3096
8f85c0c6 3097@deffn {Scheme Procedure} getsockopt sock level optname
8b6b6ce5 3098@deffnx {Scheme Procedure} setsockopt sock level optname value
8f85c0c6 3099@deffnx {C Function} scm_getsockopt (sock, level, optname)
8b6b6ce5
KR
3100@deffnx {C Function} scm_setsockopt (sock, level, optname, value)
3101Get or set an option on socket port @var{sock}. @code{getsockopt}
3102returns the current value. @code{setsockopt} sets a value and the
3103return is unspecified.
3104
3105@var{level} is an integer specifying a protocol layer, either
3106@code{SOL_SOCKET} for socket level options, or a protocol number from
3107the @code{IPPROTO} constants or @code{getprotoent} (@pxref{Network
3108Databases}).
3109
3110@defvar SOL_SOCKET
3111@defvarx IPPROTO_IP
3112@defvarx IPPROTO_TCP
3113@defvarx IPPROTO_UDP
3114@end defvar
a0e07ba4 3115
8b6b6ce5
KR
3116@var{optname} is an integer specifying an option within the protocol
3117layer.
3118
3119For @code{SOL_SOCKET} level the following @var{optname}s are defined
3120(when provided by the system). For their meaning see
3121@ref{Socket-Level Options,,, libc, The GNU C Library Reference
3122Manual}, or @command{man 7 socket}.
3123
3124@defvar SO_DEBUG
3125@defvarx SO_REUSEADDR
3126@defvarx SO_STYLE
3127@defvarx SO_TYPE
3128@defvarx SO_ERROR
3129@defvarx SO_DONTROUTE
3130@defvarx SO_BROADCAST
3131@defvarx SO_SNDBUF
3132@defvarx SO_RCVBUF
3133@defvarx SO_KEEPALIVE
3134@defvarx SO_OOBINLINE
3135@defvarx SO_NO_CHECK
3136@defvarx SO_PRIORITY
5f24f1b5 3137@defvarx SO_REUSEPORT
8b6b6ce5
KR
3138The @var{value} taken or returned is an integer.
3139@end defvar
a0e07ba4 3140
8b6b6ce5
KR
3141@defvar SO_LINGER
3142The @var{value} taken or returned is a pair of integers
3143@code{(@var{ENABLE} . @var{TIMEOUT})}. On old systems without timeout
3144support (ie.@: without @code{struct linger}), only @var{ENABLE} has an
3145effect but the value in Guile is always a pair.
3146@end defvar
a0e07ba4 3147
8b6b6ce5
KR
3148@c Note that we refer only to ``man ip'' here. On GNU/Linux it's
3149@c ``man 7 ip'' but on NetBSD it's ``man 4 ip''.
3150@c
3151For IP level (@code{IPPROTO_IP}) the following @var{optname}s are
3152defined (when provided by the system). See @command{man ip} for what
3153they mean.
3154
60905b80
AW
3155@defvar IP_MULTICAST_IF
3156This sets the source interface used by multicast traffic.
3157@end defvar
3158
3159@defvar IP_MULTICAST_TTL
3160This sets the default TTL for multicast traffic. This defaults
3161to 1 and should be increased to allow traffic to pass beyond the
3162local network.
3163@end defvar
3164
8b6b6ce5
KR
3165@defvar IP_ADD_MEMBERSHIP
3166@defvarx IP_DROP_MEMBERSHIP
3167These can be used only with @code{setsockopt}, not @code{getsockopt}.
3168@var{value} is a pair @code{(@var{MULTIADDR} . @var{INTERFACEADDR})}
99d16776 3169of integer IPv4 addresses (@pxref{Network Address Conversion}).
8b6b6ce5
KR
3170@var{MULTIADDR} is a multicast address to be added to or dropped from
3171the interface @var{INTERFACEADDR}. @var{INTERFACEADDR} can be
3172@code{INADDR_ANY} to have the system select the interface.
3173@var{INTERFACEADDR} can also be an interface index number, on systems
3174supporting that.
3175@end defvar
a0e07ba4
NJ
3176@end deffn
3177
8f85c0c6
NJ
3178@deffn {Scheme Procedure} shutdown sock how
3179@deffnx {C Function} scm_shutdown (sock, how)
99d16776 3180Sockets can be closed simply by using @code{close-port}. The
85a9b4ed 3181@code{shutdown} procedure allows reception or transmission on a
a0e07ba4
NJ
3182connection to be shut down individually, according to the parameter
3183@var{how}:
3184
3185@table @asis
3186@item 0
99d16776 3187Stop receiving data for this socket. If further data arrives, reject it.
a0e07ba4
NJ
3188@item 1
3189Stop trying to transmit data from this socket. Discard any
3190data waiting to be sent. Stop looking for acknowledgement of
3191data already sent; don't retransmit it if it is lost.
3192@item 2
3193Stop both reception and transmission.
3194@end table
3195
3196The return value is unspecified.
3197@end deffn
3198
13ed23db
KR
3199@deffn {Scheme Procedure} connect sock sockaddr
3200@deffnx {Scheme Procedure} connect sock AF_INET ipv4addr port
3201@deffnx {Scheme Procedure} connect sock AF_INET6 ipv6addr port [flowinfo [scopeid]]
3202@deffnx {Scheme Procedure} connect sock AF_UNIX path
8f85c0c6 3203@deffnx {C Function} scm_connect (sock, fam, address, args)
13ed23db
KR
3204Initiate a connection on socket port @var{sock} to a given address.
3205The destination is either a socket address object, or arguments the
3206same as @code{make-socket-address} would take to make such an object
3207(@pxref{Network Socket Address}). The return value is unspecified.
a0e07ba4 3208
13ed23db 3209@example
32bc9257
NJ
3210(connect sock AF_INET INADDR_LOOPBACK 23)
3211(connect sock (make-socket-address AF_INET INADDR_LOOPBACK 23))
13ed23db 3212@end example
a0e07ba4
NJ
3213@end deffn
3214
13ed23db
KR
3215@deffn {Scheme Procedure} bind sock sockaddr
3216@deffnx {Scheme Procedure} bind sock AF_INET ipv4addr port
3217@deffnx {Scheme Procedure} bind sock AF_INET6 ipv6addr port [flowinfo [scopeid]]
3218@deffnx {Scheme Procedure} bind sock AF_UNIX path
8f85c0c6 3219@deffnx {C Function} scm_bind (sock, fam, address, args)
13ed23db
KR
3220Bind socket port @var{sock} to the given address. The address is
3221either a socket address object, or arguments the same as
3222@code{make-socket-address} would take to make such an object
3223(@pxref{Network Socket Address}). The return value is unspecified.
a0e07ba4 3224
13ed23db 3225Generally a socket is only explicitly bound to a particular address
679cceed 3226when making a server, i.e.@: to listen on a particular port. For an
13ed23db
KR
3227outgoing connection the system will assign a local address
3228automatically, if not already bound.
a0e07ba4 3229
13ed23db
KR
3230@example
3231(bind sock AF_INET INADDR_ANY 12345)
41185bfe 3232(bind sock (make-socket-address AF_INET INADDR_ANY 12345))
13ed23db 3233@end example
a0e07ba4
NJ
3234@end deffn
3235
8f85c0c6
NJ
3236@deffn {Scheme Procedure} listen sock backlog
3237@deffnx {C Function} scm_listen (sock, backlog)
a0e07ba4
NJ
3238Enable @var{sock} to accept connection
3239requests. @var{backlog} is an integer specifying
3240the maximum length of the queue for pending connections.
3241If the queue fills, new clients will fail to connect until
3242the server calls @code{accept} to accept a connection from
3243the queue.
3244
3245The return value is unspecified.
3246@end deffn
3247
8f85c0c6
NJ
3248@deffn {Scheme Procedure} accept sock
3249@deffnx {C Function} scm_accept (sock)
13ed23db
KR
3250Accept a connection from socket port @var{sock} which has been enabled
3251for listening with @code{listen} above. If there are no incoming
1b09b607
KR
3252connections in the queue, wait until one is available (unless
3253@code{O_NONBLOCK} has been set on the socket, @pxref{Ports and File
3254Descriptors,@code{fcntl}}).
a0e07ba4 3255
13ed23db
KR
3256The return value is a pair. The @code{car} is a new socket port,
3257connected and ready to communicate. The @code{cdr} is a socket
3258address object (@pxref{Network Socket Address}) which is where the
3259remote connection is from (like @code{getpeername} below).
a0e07ba4 3260
13ed23db
KR
3261All communication takes place using the new socket returned. The
3262given @var{sock} remains bound and listening, and @code{accept} may be
3263called on it again to get another incoming connection when desired.
2ce02471 3264@end deffn
a0e07ba4 3265
8f85c0c6
NJ
3266@deffn {Scheme Procedure} getsockname sock
3267@deffnx {C Function} scm_getsockname (sock)
13ed23db
KR
3268Return a socket address object which is the where @var{sock} is bound
3269locally. @var{sock} may have obtained its local address from
3270@code{bind} (above), or if a @code{connect} is done with an otherwise
3271unbound socket (which is usual) then the system will have assigned an
3272address.
3273
3274Note that on many systems the address of a socket in the
3275@code{AF_UNIX} namespace cannot be read.
a0e07ba4
NJ
3276@end deffn
3277
8f85c0c6
NJ
3278@deffn {Scheme Procedure} getpeername sock
3279@deffnx {C Function} scm_getpeername (sock)
13ed23db 3280Return a socket address object which is where @var{sock} is connected
679cceed 3281to, i.e.@: the remote endpoint.
13ed23db
KR
3282
3283Note that on many systems the address of a socket in the
3284@code{AF_UNIX} namespace cannot be read.
a0e07ba4
NJ
3285@end deffn
3286
8f85c0c6
NJ
3287@deffn {Scheme Procedure} recv! sock buf [flags]
3288@deffnx {C Function} scm_recv (sock, buf, flags)
a0e07ba4
NJ
3289Receive data from a socket port.
3290@var{sock} must already
3291be bound to the address from which data is to be received.
d21a1dc8 3292@var{buf} is a bytevector into which
a0e07ba4
NJ
3293the data will be written. The size of @var{buf} limits
3294the amount of
3295data which can be received: in the case of packet
3296protocols, if a packet larger than this limit is encountered
3297then some data
3298will be irrevocably lost.
3299
2ce02471
NJ
3300@vindex MSG_OOB
3301@vindex MSG_PEEK
3302@vindex MSG_DONTROUTE
7403e409
NJ
3303The optional @var{flags} argument is a value or bitwise OR of
3304@code{MSG_OOB}, @code{MSG_PEEK}, @code{MSG_DONTROUTE} etc.
a0e07ba4
NJ
3305
3306The value returned is the number of bytes read from the
3307socket.
3308
3309Note that the data is read directly from the socket file
3310descriptor:
3311any unread buffered port data is ignored.
3312@end deffn
3313
8f85c0c6
NJ
3314@deffn {Scheme Procedure} send sock message [flags]
3315@deffnx {C Function} scm_send (sock, message, flags)
2ce02471
NJ
3316@vindex MSG_OOB
3317@vindex MSG_PEEK
3318@vindex MSG_DONTROUTE
d21a1dc8 3319Transmit bytevector @var{message} on socket port @var{sock}.
7403e409
NJ
3320@var{sock} must already be bound to a destination address. The value
3321returned is the number of bytes transmitted---it's possible for this
3322to be less than the length of @var{message} if the socket is set to be
3323non-blocking. The optional @var{flags} argument is a value or bitwise
3324OR of @code{MSG_OOB}, @code{MSG_PEEK}, @code{MSG_DONTROUTE} etc.
a0e07ba4
NJ
3325
3326Note that the data is written directly to the socket
3327file descriptor:
3328any unflushed buffered port data is ignored.
3329@end deffn
3330
d21a1dc8
LC
3331@deffn {Scheme Procedure} recvfrom! sock buf [flags [start [end]]]
3332@deffnx {C Function} scm_recvfrom (sock, buf, flags, start, end)
40296bab
KR
3333Receive data from socket port @var{sock}, returning the originating
3334address as well as the data. This function is usually for datagram
3335sockets, but can be used on stream-oriented sockets too.
3336
d21a1dc8
LC
3337The data received is stored in bytevector @var{buf}, using
3338either the whole bytevector or just the region between the optional
3339@var{start} and @var{end} positions. The size of @var{buf}
3340limits the amount of data that can be received. For datagram
3341protocols if a packet larger than this is received then excess
3342bytes are irrevocably lost.
40296bab
KR
3343
3344The return value is a pair. The @code{car} is the number of bytes
3345read. The @code{cdr} is a socket address object (@pxref{Network
3346Socket Address}) which is where the data came from, or @code{#f} if
3347the origin is unknown.
a0e07ba4 3348
2ce02471
NJ
3349@vindex MSG_OOB
3350@vindex MSG_PEEK
3351@vindex MSG_DONTROUTE
40296bab
KR
3352The optional @var{flags} argument is a or bitwise-OR (@code{logior})
3353of @code{MSG_OOB}, @code{MSG_PEEK}, @code{MSG_DONTROUTE} etc.
a0e07ba4 3354
40296bab
KR
3355Data is read directly from the socket file descriptor, any buffered
3356port data is ignored.
a0e07ba4 3357
40296bab
KR
3358@c This was linux kernel 2.6.15 and glibc 2.3.6, not sure what any
3359@c specs are supposed to say about recvfrom threading.
3360@c
3361On a GNU/Linux system @code{recvfrom!} is not multi-threading, all
3362threads stop while a @code{recvfrom!} call is in progress. An
3363application may need to use @code{select}, @code{O_NONBLOCK} or
3364@code{MSG_DONTWAIT} to avoid this.
a0e07ba4
NJ
3365@end deffn
3366
13ed23db
KR
3367@deffn {Scheme Procedure} sendto sock message sockaddr [flags]
3368@deffnx {Scheme Procedure} sendto sock message AF_INET ipv4addr port [flags]
3369@deffnx {Scheme Procedure} sendto sock message AF_INET6 ipv6addr port [flowinfo [scopeid [flags]]]
3370@deffnx {Scheme Procedure} sendto sock message AF_UNIX path [flags]
8f85c0c6 3371@deffnx {C Function} scm_sendto (sock, message, fam, address, args_and_flags)
d21a1dc8 3372Transmit bytevector @var{message} as a datagram socket port
13ed23db
KR
3373@var{sock}. The destination is specified either as a socket address
3374object, or as arguments the same as would be taken by
3375@code{make-socket-address} to create such an object (@pxref{Network
3376Socket Address}).
3377
3378The destination address may be followed by an optional @var{flags}
3379argument which is a @code{logior} (@pxref{Bitwise Operations}) of
3380@code{MSG_OOB}, @code{MSG_PEEK}, @code{MSG_DONTROUTE} etc.
a0e07ba4
NJ
3381
3382The value returned is the number of bytes transmitted --
3383it's possible for
3384this to be less than the length of @var{message} if the
3385socket is
3386set to be non-blocking.
3387Note that the data is written directly to the socket
3388file descriptor:
3389any unflushed buffered port data is ignored.
3390@end deffn
3391
3392The following functions can be used to convert short and long integers
7403e409 3393between ``host'' and ``network'' order. Although the procedures above do
a0e07ba4
NJ
3394this automatically for addresses, the conversion will still need to
3395be done when sending or receiving encoded integer data from the network.
3396
8f85c0c6
NJ
3397@deffn {Scheme Procedure} htons value
3398@deffnx {C Function} scm_htons (value)
a0e07ba4
NJ
3399Convert a 16 bit quantity from host to network byte ordering.
3400@var{value} is packed into 2 bytes, which are then converted
3401and returned as a new integer.
3402@end deffn
3403
8f85c0c6
NJ
3404@deffn {Scheme Procedure} ntohs value
3405@deffnx {C Function} scm_ntohs (value)
a0e07ba4
NJ
3406Convert a 16 bit quantity from network to host byte ordering.
3407@var{value} is packed into 2 bytes, which are then converted
3408and returned as a new integer.
3409@end deffn
3410
8f85c0c6
NJ
3411@deffn {Scheme Procedure} htonl value
3412@deffnx {C Function} scm_htonl (value)
a0e07ba4
NJ
3413Convert a 32 bit quantity from host to network byte ordering.
3414@var{value} is packed into 4 bytes, which are then converted
3415and returned as a new integer.
3416@end deffn
3417
8f85c0c6
NJ
3418@deffn {Scheme Procedure} ntohl value
3419@deffnx {C Function} scm_ntohl (value)
a0e07ba4
NJ
3420Convert a 32 bit quantity from network to host byte ordering.
3421@var{value} is packed into 4 bytes, which are then converted
3422and returned as a new integer.
3423@end deffn
3424
3425These procedures are inconvenient to use at present, but consider:
3426
3427@example
3428(define write-network-long
3429 (lambda (value port)
3430 (let ((v (make-uniform-vector 1 1 0)))
3431 (uniform-vector-set! v 0 (htonl value))
3432 (uniform-vector-write v port))))
3433
3434(define read-network-long
3435 (lambda (port)
3436 (let ((v (make-uniform-vector 1 1 0)))
3437 (uniform-vector-read! v port)
3438 (ntohl (uniform-vector-ref v 0)))))
3439@end example
3440
bcf009c3
NJ
3441
3442@node Internet Socket Examples
3229f68b 3443@subsubsection Network Socket Examples
f3dfb8ac
KR
3444@cindex network examples
3445@cindex socket examples
bcf009c3 3446
3229f68b 3447The following give examples of how to use network sockets.
bcf009c3 3448
3229f68b 3449@subsubheading Internet Socket Client Example
bcf009c3
NJ
3450
3451@cindex socket client example
3452The following example demonstrates an Internet socket client.
3453It connects to the HTTP daemon running on the local machine and
3454returns the contents of the root index URL.
3455
3456@example
a8d0313f 3457(let ((s (socket PF_INET SOCK_STREAM 0)))
3452e666 3458 (connect s AF_INET (inet-pton AF_INET "127.0.0.1") 80)
bcf009c3
NJ
3459 (display "GET / HTTP/1.0\r\n\r\n" s)
3460
3461 (do ((line (read-line s) (read-line s)))
3462 ((eof-object? line))
3463 (display line)
3464 (newline)))
3465@end example
3466
3467
3229f68b 3468@subsubheading Internet Socket Server Example
bcf009c3
NJ
3469
3470@cindex socket server example
3471The following example shows a simple Internet server which listens on
3472port 2904 for incoming connections and sends a greeting back to the
3473client.
3474
3475@example
a8d0313f 3476(let ((s (socket PF_INET SOCK_STREAM 0)))
bcf009c3 3477 (setsockopt s SOL_SOCKET SO_REUSEADDR 1)
7403e409 3478 ;; @r{Specific address?}
3452e666 3479 ;; @r{(bind s AF_INET (inet-pton AF_INET "127.0.0.1") 2904)}
bcf009c3
NJ
3480 (bind s AF_INET INADDR_ANY 2904)
3481 (listen s 5)
3482
3483 (simple-format #t "Listening for clients in pid: ~S" (getpid))
3484 (newline)
3485
3486 (while #t
99d16776
KR
3487 (let* ((client-connection (accept s))
3488 (client-details (cdr client-connection))
3489 (client (car client-connection)))
3490 (simple-format #t "Got new client connection: ~S"
3491 client-details)
3492 (newline)
3493 (simple-format #t "Client address: ~S"
3494 (gethostbyaddr
3495 (sockaddr:addr client-details)))
3496 (newline)
3497 ;; @r{Send back the greeting to the client port}
3498 (display "Hello client\r\n" client)
3499 (close client))))
bcf009c3
NJ
3500@end example
3501
3502
a0e07ba4 3503@node System Identification
3229f68b 3504@subsection System Identification
f3dfb8ac 3505@cindex system name
a0e07ba4
NJ
3506
3507This section lists the various procedures Guile provides for accessing
3508information about the system it runs on.
3509
8f85c0c6
NJ
3510@deffn {Scheme Procedure} uname
3511@deffnx {C Function} scm_uname ()
a0e07ba4
NJ
3512Return an object with some information about the computer
3513system the program is running on.
a0e07ba4
NJ
3514
3515The following procedures accept an object as returned by @code{uname}
99d16776 3516and return a selected component (all of which are strings).
a0e07ba4 3517
2ce02471 3518@deffn {Scheme Procedure} utsname:sysname un
a0e07ba4 3519The name of the operating system.
2ce02471
NJ
3520@end deffn
3521@deffn {Scheme Procedure} utsname:nodename un
a0e07ba4 3522The network name of the computer.
2ce02471
NJ
3523@end deffn
3524@deffn {Scheme Procedure} utsname:release un
a0e07ba4 3525The current release level of the operating system implementation.
2ce02471
NJ
3526@end deffn
3527@deffn {Scheme Procedure} utsname:version un
a0e07ba4 3528The current version level within the release of the operating system.
2ce02471
NJ
3529@end deffn
3530@deffn {Scheme Procedure} utsname:machine un
a0e07ba4 3531A description of the hardware.
2ce02471
NJ
3532@end deffn
3533@end deffn
a0e07ba4 3534
8f85c0c6
NJ
3535@deffn {Scheme Procedure} gethostname
3536@deffnx {C Function} scm_gethostname ()
f3dfb8ac 3537@cindex host name
a0e07ba4
NJ
3538Return the host name of the current processor.
3539@end deffn
3540
8f85c0c6
NJ
3541@deffn {Scheme Procedure} sethostname name
3542@deffnx {C Function} scm_sethostname (name)
a0e07ba4
NJ
3543Set the host name of the current processor to @var{name}. May
3544only be used by the superuser. The return value is not
3545specified.
3546@end deffn
3547
a0e07ba4 3548@node Locales
3229f68b 3549@subsection Locales
f3dfb8ac 3550@cindex locale
a0e07ba4 3551
8f85c0c6
NJ
3552@deffn {Scheme Procedure} setlocale category [locale]
3553@deffnx {C Function} scm_setlocale (category, locale)
74f76d62
KR
3554Get or set the current locale, used for various internationalizations.
3555Locales are strings, such as @samp{sv_SE}.
3556
b89c4943
LC
3557If @var{locale} is given then the locale for the given @var{category}
3558is set and the new value returned. If @var{locale} is not given then
3559the current value is returned. @var{category} should be one of the
3560following values (@pxref{Locale Categories, Categories of Activities
3561that Locales Affect,, libc, The GNU C Library Reference Manual}):
74f76d62
KR
3562
3563@defvar LC_ALL
3564@defvarx LC_COLLATE
3565@defvarx LC_CTYPE
3566@defvarx LC_MESSAGES
3567@defvarx LC_MONETARY
3568@defvarx LC_NUMERIC
3569@defvarx LC_TIME
3570@end defvar
3571
f3dfb8ac 3572@cindex @code{LANG}
74f76d62
KR
3573A common usage is @samp{(setlocale LC_ALL "")}, which initializes all
3574categories based on standard environment variables (@code{LANG} etc).
3575For full details on categories and locale names @pxref{Locales,,
3576Locales and Internationalization, libc, The GNU C Library Reference
3577Manual}.
b89c4943
LC
3578
3579Note that @code{setlocale} affects locale settings for the whole
a2f00b9b 3580process. @xref{i18n Introduction, locale objects and
b89c4943 3581@code{make-locale}}, for a thread-safe alternative.
a0e07ba4
NJ
3582@end deffn
3583
3584@node Encryption
3229f68b 3585@subsection Encryption
f3dfb8ac 3586@cindex encryption
a0e07ba4
NJ
3587
3588Please note that the procedures in this section are not suited for
3589strong encryption, they are only interfaces to the well-known and
3590common system library functions of the same name. They are just as good
3591(or bad) as the underlying functions, so you should refer to your system
9a18d8d4
KR
3592documentation before using them (@pxref{crypt,, Encrypting Passwords,
3593libc, The GNU C Library Reference Manual}).
a0e07ba4 3594
8f85c0c6
NJ
3595@deffn {Scheme Procedure} crypt key salt
3596@deffnx {C Function} scm_crypt (key, salt)
9a18d8d4
KR
3597Encrypt @var{key}, with the addition of @var{salt} (both strings),
3598using the @code{crypt} C library call.
a0e07ba4
NJ
3599@end deffn
3600
5f378d17
TTN
3601Although @code{getpass} is not an encryption procedure per se, it
3602appears here because it is often used in combination with @code{crypt}:
a0e07ba4 3603
8f85c0c6
NJ
3604@deffn {Scheme Procedure} getpass prompt
3605@deffnx {C Function} scm_getpass (prompt)
f3dfb8ac 3606@cindex password
a0e07ba4
NJ
3607Display @var{prompt} to the standard error output and read
3608a password from @file{/dev/tty}. If this file is not
3609accessible, it reads from standard input. The password may be
3610up to 127 characters in length. Additional characters and the
3611terminating newline character are discarded. While reading
3612the password, echoing and the generation of signals by special
3613characters is disabled.
3614@end deffn
5982a8e0
KR
3615
3616
3617@c Local Variables:
3618@c TeX-master: "guile.texi"
3619@c End: