This is guile-ref.info, produced by Makeinfo version 3.12a from guile-ref.texi. INFO-DIR-SECTION Scheme Programming START-INFO-DIR-ENTRY * guile-ref: (guile-ref). The Guile Reference Manual. END-INFO-DIR-ENTRY Guile Reference Manual Copyright (C) 1996 Free Software Foundation Copyright (C) 1997 Free Software Foundation Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.  File: guile-ref.info, Node: Ports and File Descriptors, Next: File System, Prev: Conventions, Up: Top Ports and File Descriptors ************************** Conventions largely follow those of scsh, *Note The Scheme shell (scsh)::. Guile ports are currently based on C stdio streams. Ports can be buffered or unbuffered. Unbuffered ports can be specified by including `0' in a port mode string. Note that some system call interfaces (e.g., `recv!') will accept ports as arguments, but will actually operate directly on the file descriptor underlying the port. Any port buffering is ignored, including the one character buffer used to implement `peek-char' and `unread-char'. File descriptors are generally not useful for Scheme programs; however they can be needed when interfacing with foreign code and the Unix environment. A file descriptor can be extracted from a port and later converted back to a port. However a file descriptor is just an integer, and the garbage collector doesn't recognise it as a reference to the port. If all other references to the port were dropped, then it's likely that the garbage collector would free the port, with the side-effect of closing the file descriptor prematurely. To assist the programmer in avoiding this problem, each port has an associated "revealed count" which can be used to keep track of how many times the underlying file descriptor has been stored in other places. The idea is for the programmer to ensure that the revealed count will be greater than zero if the file descriptor is needed elsewhere. For the simple case where a file descriptor is "imported" once to become a port, it does not matter if the file descriptor is closed when the port is garbage collected. There is no need to maintain a revealed count. Likewise when "exporting" a file descriptor to the external environment, setting the revealed count is not required if the port is kept open while the file descriptor is in use. To correspond with traditional Unix behaviour, the three file descriptors (0, 1 and 2) are automatically imported when a program starts up and assigned to the initial values of the current input, output and error ports. The revealed count for each is initially set to one, so that dropping references to one of these ports will not result in its garbage collection: it could be retrieved with fdopen or fdes->ports. -- primitive: port-revealed port Returns the revealed count for PORT. -- primitive: set-port-revealed! port count Sets the revealed count for a port to a given value. The return value is unspecified. -- primitive: fileno port Returns the integer file descriptor underlying PORT without changing its revealed count. -- procedure: port->fdes port Returns the integer file descriptor underlying PORT. As a side effect the revealed count of PORT is incremented. -- primitive: fdopen fdes modes Returns a new port based on the file descriptor FDES with modes given by the string MODES. The revealed count of the port is initialized to zero. The modes string is the same as that accepted by *Note open-file: File Ports. -- primitive: fdes->ports fdes Returns a list of existing ports which have FDES as an underlying file descriptor, without changing their revealed counts. -- procedure: fdes->inport fdes Returns an existing input port which has FDES as its underlying file descriptor, if one exists, and increments its revealed count. Otherwise, returns a new input port with a revealed count of 1. -- procedure: fdes->outport fdes Returns an existing output port which has FDES as its underlying file descriptor, if one exists, and increments its revealed count. Otherwise, returns a new output port with a revealed count of 1. -- primitive: primitive-move->fdes port fdes Moves the underlying file descriptor for PORT to the integer value FDES without changing the revealed count of PORT. Any other ports already using this descriptor will be automatically shifted to new descriptors and their revealed counts reset to zero. The return value is zero if the file descriptor does not need to be moved or one if it does. -- procedure: move->fdes port fd Moves the underlying file descriptor for PORT to the integer value FDES and sets its revealed count to one. Any other ports already using this descriptor will be automatically shifted to new descriptors and their revealed counts reset to zero. The return value is unspecified. -- procedure: release-port-handle port Decrements the revealed count for a port. -- primitive: force-output [port] Flush the specified output port, or the current output port if PORT is omitted. The return value is unspecified. -- primitive: flush-all-ports Flush all open output ports. The return value is unspecified. -- primitive: fsync port/fd Copies any unwritten data for the specified output file descriptor to disk. If PORT/FD is a port, its buffer is flushed before the underlying file descriptor is fsync'd. The return value is unspecified. -- primitive: open path flags [mode] Open the file named by PATH for reading and/or writing. FLAGS is an integer specifying how the file should be opened. MODE is an integer specifying the permission bits of the file, if it needs to be created, before the umask is applied. The default is 666 (Unix itself has no default). FLAGS can be constructed by combining variables using `logior'. Basic flags are: -- Variable: O_RDONLY Open the file read-only. -- Variable: O_WRONLY Open the file write-only. -- Variable: O_RDWR Open the file read/write. -- Variable: O_APPEND Append to the file instead of truncating. -- Variable: O_CREAT Create the file if it does not already exist. See the Unix documentation of the `open' system call for additional flags. -- primitive: open-fdes path flags [modes] Similar to `open' but returns a file descriptor instead of a port. -- primitive: close port/fd Similar to close-port (*note close-port: Closing Ports.), but also works on file descriptors. A side effect of closing a file descriptor is that any ports using that file descriptor are moved to a different file descriptor and have their revealed counts set to zero. -- primitive: pipe Creates a pipe which can be used for communication. The return value is a pair in which the CAR contains an input port and the CDR an output port. Data written to the output port can be read from the input port. Note that both ports are buffered so it may be necessary to flush the output port before data will actually be sent across the pipe. Alternatively a new unbuffered output port can be created using `duplicate-port' with an appropriate mode string. The next group of procedures perform a `dup2' system call, if NEWFD (an integer) is supplied, otherwise a `dup'. The file descriptor to be duplicated can be supplied as an integer or contained in a port. The type of value returned varies depending on which procedure is used. All procedures also have the side effect when performing `dup2' that any ports using NEWFD are moved to a different file descriptor and have their revealed counts set to zero. -- primitive: dup->fdes port/fd [newfd] Returns an integer file descriptor. -- procedure: dup->inport port/fd [newfd] Returns a new input port using the new file descriptor. -- procedure: dup->outport port/fd [newfd] Returns a new output port using the new file descriptor. -- procedure: dup port/fd [newfd] Returns a new port if PORT/FD is a port, with the same mode as the supplied port, otherwise returns an integer file descriptor. -- procedure: dup->port port/fd mode [newfd] Returns a new port using the new file descriptor. MODE supplies a mode string for the port (*note open-file: File Ports.). -- procedure: duplicate-port port modes Returns a new port which is opened on a duplicate of the file descriptor underlying PORT, with mode string MODES as for *Note open-file: File Ports. The two ports will share a file position and file status flags. Unexpected behaviour can result if both ports are subsequently used and the original and/or duplicate ports are buffered. The mode string can include `0' to obtain an unbuffered duplicate port. This procedure is equivalent to `(dup->port PORT MODES)'. -- primitive: redirect-port old-port new-port This procedure takes two ports and duplicates the underlying file descriptor from OLD-PORT into NEW-PORT. The current file descriptor in NEW-PORT will be closed. After the redirection the two ports will share a file position and file status flags. The return value is unspecified. Unexpected behaviour can result if both ports are subsequently used and the original and/or duplicate ports are buffered. This procedure does not have any side effects on other ports or revealed counts. -- primitive: port-mode port Returns the port modes associated with the open port PORT. These will not necessarily be identical to the modes used when the port was opened, since modes such as "append" which are used only during port creation are not retained. -- primitive: close-all-ports-except port ... Close all open file ports used by the interpreter except for those supplied as arguments. This procedure is intended to be used before an exec call to close file descriptors which are not needed in the new process. -- primitive: setvbuf port mode [size] Set the buffering mode for PORT. MODE can be: `_IONBF' non-buffered `_IOLBF' line buffered `_IOFBF' block buffered, using a newly allocated buffer of SIZE bytes. However if SIZE is zero or unspecified, the port will be made non-buffered. This procedure should not be used after I/O has been performed with the port. Ports are usually block buffered by default, with a default buffer size. Procedures e.g., *Note open-file: File Ports, which accept a mode string allow `0' to be added to request an unbuffered port. -- primitive: freopen filename modes port Reopen PORT on the specified FILENAME with mode string MODES as for *Note open-file: File Ports. -- primitive: fcntl fd/port command [value] Apply COMMAND to the specified file descriptor or the underlying file descriptor of the specified port. VALUE is an optional integer argument. Values for COMMAND are: `F_DUPFD' Duplicate a file descriptor `F_GETFD' Get flags associated with the file descriptor. `F_SETFD' Set flags associated with the file descriptor to VALUE. `F_GETFL' Get flags associated with the open file. `F_SETFL' Set flags associated with the open file to VALUE `F_GETOWN' Get the process ID of a socket's owner, for `SIGIO' signals. `F_SETOWN' Set the process that owns a socket to VALUE, for `SIGIO' signals. `FD_CLOEXEC' The value used to indicate the "close on exec" flag with `F_GETFL' or `F_SETFL'. -- primitive: select reads writes excepts [secs] [usecs] READS, WRITES and EXCEPTS can be lists or vectors: it doesn't matter which, but the corresponding object returned will be of the same type. Each element is a port or file descriptor on which to wait for readability, writeability or exceptional conditions respectively. SECS and USECS optionally specify a timeout: SECS can be specified alone, as either an integer or a real number, or both SECS and USECS can be specified as integers, in which case USECS is an additional timeout expressed in microseconds. Buffered input or output data is (currently, but this may change) ignored: select uses the underlying file descriptor of a port (`char-ready?' will check input buffers, output buffers are problematic). The return value is a list of subsets of the input lists or vectors for which the requested condition has been met. It is not quite compatible with scsh's select: scsh checks port buffers, doesn't accept input lists or a microsecond timeout, returns multiple values instead of a list and has an additional select! interface.  File: guile-ref.info, Node: File System, Next: User Information, Prev: Ports and File Descriptors, Up: Top File System *********** These procedures allow querying and setting file system attributes (such as owner, permissions, sizes and types of files); deleting, copying, renaming and linking files; creating and removing directories and querying their contents; syncing the file system and creating special files. -- primitive: access? path how Returns `#t' if PATH corresponds to an existing file and the current process has the type of access specified by HOW, otherwise `#f'. HOW should be specified using the values of the variables listed below. Multiple values can be combined using a bitwise or, in which case `#t' will only be returned if all accesses are granted. Permissions are checked using the real id of the current process, not the effective id, although it's the effective id which determines whether the access would actually be granted. -- Variable: R_OK test for read permission. -- Variable: W_OK test for write permission. -- Variable: X_OK test for execute permission. -- Variable: F_OK test for existence of the file. -- primitive: stat obj Returns an object containing various information about the file determined by OBJ. OBJ can be a string containing a file name or a port or integer file descriptor which is open on a file (in which case `fstat' is used as the underlying system call). The object returned by `stat' can be passed as a single parameter to the following procedures, all of which return integers: `stat:dev' The device containing the file. `stat:ino' The file serial number, which distinguishes this file from all other files on the same device. `stat:mode' The mode of the file. This includes file type information and the file permission bits. See `stat:type' and `stat:perms' below. `stat:nlink' The number of hard links to the file. `stat:uid' The user ID of the file's owner. `stat:gid' The group ID of the file. `stat:rdev' Device ID; this entry is defined only for character or block special files. `stat:size' The size of a regular file in bytes. `stat:atime' The last access time for the file. `stat:mtime' The last modification time for the file. `stat:ctime' The last modification time for the attributes of the file. `stat:blksize' The optimal block size for reading or writing the file, in bytes. `stat:blocks' The amount of disk space that the file occupies measured in units of 512 byte blocks. In addition, the following procedures return the information from stat:mode in a more convenient form: `stat:type' A symbol representing the type of file. Possible values are regular, directory, symlink, block-special, char-special, fifo, socket and unknown `stat:perms' An integer representing the access permission bits. -- primitive: lstat path Similar to `stat', but does not follow symbolic links, i.e., it will return information about a symbolic link itself, not the file it points to. PATH must be a string. -- primitive: readlink path Returns the value of the symbolic link named by PATH (a string), i.e., the file that the link points to. -- primitive: chown obj owner group Change the ownership and group of the file referred to by OBJ to the integer userid values OWNER and GROUP. OBJ can be a string containing a file name or a port or integer file descriptor which is open on the file (in which case fchown is used as the underlying system call). The return value is unspecified. If OBJ is a symbolic link, either the ownership of the link or the ownership of the referenced file will be changed depending on the operating system (lchown is unsupported at present). If OWNER or GROUP is specified as `-1', then that ID is not changed. -- primitive: chmod obj mode Changes the permissions of the file referred to by OBJ. OBJ can be a string containing a file name or a port or integer file descriptor which is open on a file (in which case `fchmod' is used as the underlying system call). MODE specifies the new permissions as a decimal number, e.g., `(chmod "foo" #o755)'. The return value is unspecified. -- primitive: utime path [actime] [modtime] `utime' sets the access and modification times for the file named by PATH. If ACTIME or MODTIME is not supplied, then the current time is used. ACTIME and MODTIME must be integer time values as returned by the `current-time' procedure. E.g., (utime "foo" (- (current-time) 3600)) will set the access time to one hour in the past and the modification time to the current time. -- primitive: delete-file path Deletes (or "unlinks") the file specified by PATH. -- primitive: copy-file path-from path-to Copy the file specified by PATH-FROM to PATH-TO. The return value is unspecified. -- primitive: rename-file path-from path-to Renames the file specified by PATH-FROM to PATH-TO. The return value is unspecified. -- primitive: truncate-file obj size Truncates the file referred to by OBJ to at most SIZE bytes. OBJ can be a string containing a file name or an integer file descriptor or port open for output on the file. The underlying system calls are `truncate' and `ftruncate'. The return value is unspecified. -- primitive: link path-from path-to Creates a new name PATH-TO in the file system for the file named by PATH-FROM. If PATH-FROM is a symbolic link, the link may or may not be followed depending on the system. -- primitive: symlink path-from path-to Create a symbolic link named PATH-TO with the value (i.e., pointing to) PATH-FROM. The return value is unspecified. -- primitive: mkdir path [mode] Create a new directory named by PATH. If MODE is omitted then the permissions of the directory file are set using the current umask. Otherwise they are set to the decimal value specified with MODE. The return value is unspecified. -- primitive: rmdir path Remove the existing directory named by PATH. The directory must be empty for this to succeed. The return value is unspecified. -- primitive: opendir path Open the directory specified by PATH and return a directory port. -- primitive: readdir port Return (as a string) the next directory entry from the directory port PORT. If there is no remaining entry to be read then the end of file object is returned. -- primitive: rewinddir port Reset the directory port PORT so that the next call to `readdir' will return the first directory entry. -- primitive: closedir port Close the directory port PORT. The return value is unspecified. -- primitive: sync Flush the operating system disk buffers. The return value is unspecified. -- primitive: mknod path type perms dev Creates a new special file, such as a file corresponding to a device. PATH specifies the name of the file. TYPE should be one of the following symbols: regular, directory, symlink, block-special, char-special, fifo, or socket. PERMS (an integer) specifies the file permissions. DEV (an integer) specifies which device the special file refers to. Its exact interpretation depends on the kind of special file being created. E.g., (mknod "/dev/fd0" 'block-special #o660 (+ (* 2 256) 2)) The return value is unspecified. -- primitive: tmpnam Create a new file in the file system with a unique name. The return value is the name of the new file. This function is implemented with the `tmpnam' function in the system libraries.  File: guile-ref.info, Node: User Information, Next: Time, Prev: File System, Up: Top User Information **************** The facilities in this section provide an interface to the user and group database. They should be used with care since they are not reentrant. The following functions accept an object representing user information and return a selected component: `passwd:name' The name of the userid. `passwd:passwd' The encrypted passwd. `passwd:uid' The user id number. `passwd:gid' The group id number. `passwd:gecos' The full name. `passwd:dir' The home directory. `passwd:shell' The login shell. -- procedure: getpwuid uid Look up an integer userid in the user database. -- procedure: getpwnam name Look up a user name string in the user database. -- procedure: setpwent Initializes a stream used by `getpwent' to read from the user database. The next use of `getpwent' will return the first entry. The return value is unspecified. -- procedure: getpwent Return the next entry in the user database, using the stream set by `setpwent'. -- procedure: endpwent Closes the stream used by `getpwent'. The return value is unspecified. -- primitive: setpw [reset?] If called with a true argument, initialize or reset the password data stream. Otherwise, close the stream. The `setpwent' and `endpwent' procedures are implemented on top of this. -- primitive: getpw [obj] Look up an entry in the user database. OBJ can be an integer, a string, or omitted, giving the behaviour of getpwuid, getpwnam or getpwent respectively. The following functions accept an object representing group information and return a selected component: `group:name' The group name. `group:passwd' The encrypted group password. `group:gid' The group id number. `group:mem' A list of userids which have this group as a supplimentary group. -- procedure: getgrgid gid Look up an integer groupid in the group database. -- procedure: getgrnam name Look up a group name in the group database. -- procedure: setgrent Initializes a stream used by `getgrent' to read from the group database. The next use of `getgrent' will return the first entry. The return value is unspecified. -- procedure: getgrent Return the next entry in the group database, using the stream set by `setgrent'. -- procedure: endgrent Closes the stream used by `getgrent'. The return value is unspecified. -- primitive: setgr [reset?] If called with a true argument, initialize or reset the group data stream. Otherwise, close the stream. The `setgrent' and `endgrent' procedures are implemented on top of this. -- primitive: getgr [obj] Look up an entry in the group database. OBJ can be an integer, a string, or omitted, giving the behaviour of getgrgid, getgrnam or getgrent respectively.  File: guile-ref.info, Node: Time, Next: Processes, Prev: User Information, Up: Top Time **** -- primitive: current-time Returns the number of seconds since 1970-01-01 00:00:00 UTC, excluding leap seconds. -- primitive: gettimeofday Returns a pair containing the number of seconds and microseconds since 1970-01-01 00:00:00 UTC, excluding leap seconds. Note: whether true microsecond resolution is available depends on the operating system. The following procedures either accept an object representing a broken down time and return a selected component, or accept an object representing a broken down time and a value and set the component to the value. The numbers in parentheses give the usual range. `tm:sec, set-tm:sec' Seconds (0-59). `tm:min, set-tm:min' Minutes (0-59). `tm:hour, set-tm:hour' Hours (0-23). `tm:mday, set-tm:mday' Day of the month (1-31). `tm:mon, set-tm:mon' Month (0-11). `tm:year, set-tm:year' Year (70-), the year minus 1900. `tm:wday, set-tm:wday' Day of the week (0-6) with Sunday represented as 0. `tm:yday, set-tm:yday' Day of the year (0-364, 365 in leap years). `tm:isdst, set-tm:isdst' Daylight saving indicator (0 for "no", greater than 0 for "yes", less than 0 for "unknown"). `tm:gmtoff, set-tm:gmtoff' Time zone offset in seconds west of UTC (-46800 to 43200). `tm:zone, set-tm:zone' Time zone label (a string), not necessarily unique. -- primitive: localtime time [zone] Returns an object representing the broken down components of TIME, an integer like the one returned by `current-time'. The time zone for the calculation is optionally specified by ZONE (a string), otherwise the `TZ' environment variable or the system default is used. -- primitive: gmtime time Returns an object representing the broken down components of TIME, an integer like the one returned by `current-time'. The values are calculated for UTC. -- primitive: mktime bd-time [zone] BD-TIME is an object representing broken down time and `zone' is an optional time zone specifier (otherwise the TZ environment variable or the system default is used). Returns a pair: the CAR is a corresponding integer time value like that returned by `current-time'; the CDR is a broken down time object, similar to as BD-TIME but with normalized values. -- primitive: tzset Initialize the timezone from the TZ environment variable or the system default. Usually this is done automatically by other procedures which use the time zone, but this procedure may need to be used if TZ is changed. -- primitive: strftime template time Formats a time specification TIME using TEMPLATE. TIME is an object with time components in the form returned by `localtime' or `gmtime'. TEMPLATE is a string which can include formatting specifications introduced by a `%' character. The formatting of month and day names is dependent on the current locale. The value returned is the formatted string. *Note Formatting Date and Time: (libc)Formatting Date and Time.) -- primitive: strptime template string Performs the reverse action to `strftime', parsing STRING according to the specification supplied in TEMPLATE. The interpretation of month and day names is dependent on the current locale. The value returned is a pair. The CAR has an object with time components in the form returned by `localtime' or `gmtime', but the time zone components are not usefully set. The CDR reports the number of characters from STRING which were used for the conversion. -- Variable: internal-time-units-per-second The value of this variable is the number of time units per second reported by the following procedures. -- primitive: times Returns an object with information about real and processor time. The following procedures accept such an object as an argument and return a selected component: `tms:clock' The current real time, expressed as time units relative to an arbitrary base. `tms:utime' The CPU time units used by the calling process. `tms:stime' The CPU time units used by the system on behalf of the calling process. `tms:cutime' The CPU time units used by terminated child processes of the calling process, whose status has been collected (e.g., using `waitpid'). `tms:cstime' Similarly, the CPU times units used by the system on behalf of terminated child processes. -- primitive: get-internal-real-time Returns the number of time units since the interpreter was started. -- primitive: get-internal-run-time Returns the number of time units of processor time used by the interpreter. Both "system" and "user" time are included but subprocesses are not.  File: guile-ref.info, Node: Processes, Next: Signals, Prev: Time, Up: Top Processes ********* -- primitive: chdir path Change the current working directory to PATH. The return value is unspecified. -- primitive: getcwd Returns the name of the current working directory. -- primitive: umask [mode] If MODE is omitted, retuns a decimal number representing the current file creation mask. Otherwise the file creation mask is set to MODE and the previous value is returned. E.g., `(umask #o022)' sets the mask to octal 22, decimal 18. -- primitive: getpid Returns an integer representing the current process ID. -- primitive: getgroups Returns a vector of integers representing the current supplimentary group IDs. -- primitive: getppid Returns an integer representing the process ID of the parent process. -- primitive: getuid Returns an integer representing the current real user ID. -- primitive: getgid Returns an integer representing the current real group ID. -- primitive: geteuid Returns an integer representing the current effective user ID. If the system does not support effective IDs, then the real ID is returned. `(feature? 'EIDs)' reports whether the system supports effective IDs. -- primitive: getegid Returns an integer representing the current effective group ID. If the system does not support effective IDs, then the real ID is returned. `(feature? 'EIDs)' reports whether the system supports effective IDs. -- primitive: setuid id Sets both the real and effective user IDs to the integer ID, provided the process has appropriate privileges. The return value is unspecified. -- primitive: setgid id Sets both the real and effective group IDs to the integer ID, provided the process has appropriate privileges. The return value is unspecified. -- primitive: seteuid id Sets the effective user ID to the integer ID, provided the process has appropriate privileges. If effective IDs are not supported, the real ID is set instead -- `(feature? 'EIDs)' reports whether the system supports effective IDs. The return value is unspecified. -- primitive: setegid id Sets the effective group ID to the integer ID, provided the process has appropriate privileges. If effective IDs are not supported, the real ID is set instead -- `(feature? 'EIDs)' reports whether the system supports effective IDs. The return value is unspecified. -- primitive: getpgrp Returns an integer representing the current process group ID. This is the POSIX definition, not BSD. -- primitive: setpgid pid pgid Move the process PID into the process group PGID. PID or PGID must be integers: they can be zero to indicate the ID of the current process. Fails on systems that do not support job control. The return value is unspecified. -- primitive: setsid Creates a new session. The current process becomes the session leader and is put in a new process group. The process will be detached from its controlling terminal if it has one. The return value is an integer representing the new process group ID. -- primitive: waitpid pid [options] This procedure collects status information from a child process which has terminated or (optionally) stopped. Normally it will suspend the calling process until this can be done. If more than one child process is eligible then one will be chosen by the operating system. The value of PID determines the behaviour: PID greater than 0 Request status information from the specified child process. PID equal to -1 or WAIT_ANY Request status information for any child process. PID equal to 0 or WAIT_MYPGRP Request status information for any child process in the current process group. PID less than -1 Request status information for any child process whose process group ID is -PID. The OPTIONS argument, if supplied, should be the bitwise OR of the values of zero or more of the following variables: -- Variable: WNOHANG Return immediately even if there are no child processes to be collected. -- Variable: WUNTRACED Report status information for stopped processes as well as terminated processes. The return value is a pair containing: 1. The process ID of the child process, or 0 if `WNOHANG' was specified and no process was collected. 2. The integer status value. The following three functions can be used to decode the process status code returned by `waitpid'. -- primitive: status:exit-val status Returns the exit status value, as would be set if a process ended normally through a call to `exit' or `_exit', if any, otherwise `#f'. -- primitive: status:term-sig status Returns the signal number which terminated the process, if any, otherwise `#f'. -- primitive: status:stop-sig status Returns the signal number which stopped the process, if any, otherwise `#f'. -- primitive: system [cmd] Executes CMD using the operating system's "command processor". Under Unix this is usually the default shell `sh'. The value returned is CMD's exit status as returned by `waitpid', which can be interpreted using the functions above. If `system' is called without arguments, it returns a boolean indicating whether the command processor is available. -- primitive: primitive-exit [status] Terminate the current process without unwinding the Scheme stack. This is would typically be useful after a fork. The exit status is STATUS if supplied, otherwise zero. -- primitive: execl path [arg] ... Executes the file named by PATH as a new process image. The remaining arguments are supplied to the process; from a C program they are accessable as the `argv' argument to `main'. Conventionally the first ARG is the same as PATH. All arguments must be strings. If ARG is missing, PATH is executed with a null argument list, which may have system-dependent side-effects. This procedure is currently implemented using the `execv' system call, but we call it `execl' because of its Scheme calling interface. -- primitive: execlp path [arg] ... Similar to `execl', however if FILENAME does not contain a slash then the file to execute will be located by searching the directories listed in the `PATH' environment variable. This procedure is currently implemented using the `execlv' system call, but we call it `execlp' because of its Scheme calling interface. -- primitive: execle path env [arg] ... Similar to `execl', but the environment of the new process is specified by ENV, which must be a list of strings as returned by the `environ' procedure. This procedure is currently implemented using the `execve' system call, but we call it `execle' because of its Scheme calling interface. -- primitive: primitive-fork Creates a new "child" process by duplicating the current "parent" process. In the child the return value is 0. In the parent the return value is the integer process ID of the child. This procedure has been renamed from `fork' to avoid a naming conflict with the scsh fork. -- primitive: getenv name Looks up the string NAME in the current environment. The return value is `#f' unless a string of the form `NAME=VALUE' is found, in which case the string `VALUE' is returned. -- primitive: putenv string Modifies the environment of the current process, which is also the default environment inherited by child processes. If STRING is of the form `NAME=VALUE' then it will be written directly into the environment, replacing any existing environment string with name matching `NAME'. If STRING does not contain an equal sign, then any existing string with name matching STRING will be removed. The return value is unspecified. -- procedure: setenv name value Modifies the environment of the current process, which is also the default environment inherited by child processes. If VALUE is `#f', then NAME is removed from the environment. Otherwise, the string NAME=VALUE is added to the environment, replacing any existing string with name matching NAME. The return value is unspecified. -- primitive: environ [env] If ENV is omitted, returns the current environment as a list of strings. Otherwise it sets the current environment, which is also the default environment for child processes, to the supplied list of strings. Each member of ENV should be of the form `NAME=VALUE' and values of `NAME' should not be duplicated. If ENV is supplied then the return value is unspecified. -- primitive: nice incr Increment the priority of the current process by INCR. A higher priority value means that the process runs less often. The return value is unspecified.  File: guile-ref.info, Node: Signals, Next: Terminals and Ptys, Prev: Processes, Up: Top Signals ******* Procedures to raise, handle and wait for signals. -- primitive: kill pid sig Sends a signal to the specified process or group of processes. PID specifies the processes to which the signal is sent: PID greater than 0 The process whose identifier is PID. PID equal to 0 All processes in the current process group. PID less than -1 The process group whose identifier is -PID PID equal to -1 If the process is privileged, all processes except for some special system processes. Otherwise, all processes with the current effective user ID. SIG should be specified using a variable corresponding to the Unix symbolic name, e.g., -- Variable: SIGHUP Hang-up signal. -- Variable: SIGINT Interrupt signal. -- primitive: raise sig Sends a specified signal SIG to the current process, where SIG is as described for the kill procedure. -- primitive: sigaction signum [action] [flags] Install or report the signal hander for a specified signal. SIGNUM is the signal number, which can be specified using the value of variables such as `SIGINT'. If ACTION is omitted, `sigaction' returns a pair: the CAR is the current signal hander, which will be either an integer with the value `SIG_DFL' (default action) or `SIG_IGN' (ignore), or the Scheme procedure which handles the signal, or `#f' if a non-Scheme procedure handles the signal. The CDR contains the current `sigaction' flags for the handler. If ACTION is provided, it is installed as the new handler for SIGNUM. ACTION can be a Scheme procedure taking one argument, or the value of `SIG_DFL' (default action) or `SIG_IGN' (ignore), or `#f' to restore whatever signal handler was installed before `sigaction' was first used. Flags can optionally be specified for the new handler (`SA_RESTART' is always used if the system provides it, so need not be specified.) The return value is a pair with information about the old handler as described above. This interface does not provide access to the "signal blocking" facility. Maybe this is not needed, since the thread support may provide solutions to the problem of consistent access to data structures. -- primitive: restore-signals Return all signal handlers to the values they had before any call to `sigaction' was made. The return value is unspecified. -- primitive: alarm secs Set a timer to raise a `SIGALRM' signal after the specified number of seconds (an integer). It's advisable to install a signal handler for `SIGALRM' beforehand, since the default action is to terminate the process. The return value indicates the time remaining for the previous alarm, if any. The new value replaces the previous alarm. If there was no previous alarm, the return value is zero. -- primitive: pause Pause the current process (thread?) until a signal arrives whose action is to either terminate the current process or invoke a handler procedure. The return value is unspecified. -- primitive: sleep secs Wait for the given number of seconds (an integer) or until a signal arrives. The return value is zero if the time elapses or the number of seconds remaining otherwise.  File: guile-ref.info, Node: Terminals and Ptys, Next: Pipes, Prev: Signals, Up: Top Terminals and Ptys ****************** -- primitive: isatty? port Returns `#t' if PORT is using a serial non-file device, otherwise `#f'. -- primitive: ttyname port Returns a string with the name of the serial terminal device underlying PORT. -- primitive: ctermid Returns a string containing the file name of the controlling terminal for the current process. -- primitive: tcgetpgrp port Returns the process group ID of the foreground process group associated with the terminal open on the file descriptor underlying PORT. If there is no foreground process group, the return value is a number greater than 1 that does not match the process group ID of any existing process group. This can happen if all of the processes in the job that was formerly the foreground job have terminated, and no other job has yet been moved into the foreground. -- primitive: tcsetpgrp port pgid Set the foreground process group ID for the terminal used by the file descriptor underlying PORT to the integer PGID. The calling process must be a member of the same session as PGID and must have the same controlling terminal. The return value is unspecified.  File: guile-ref.info, Node: Pipes, Next: Networking, Prev: Terminals and Ptys, Up: Top Pipes ***** These procedures provide an interface to the `popen' and `pclose' system routines. -- primitive: open-pipe command modes Executes the shell command COMMAND (a string) in a subprocess. A pipe to the process is created and returned. MODES specifies whether an input or output pipe to the process is created: it should be the value of `OPEN_READ' or `OPEN_WRITE'. -- procedure: open-input-pipe command Equivalent to `(open-pipe command OPEN_READ)'. -- procedure: open-output-pipe command Equivalent to `(open-pipe command OPEN_WRITE)'. -- primitive: close-pipe port Closes the pipe created by `open-pipe', then waits for the process to terminate and returns its status value, *Note waitpid: Processes, for information on how to interpret this value. `close-port' (*note close-port: Closing Ports.) can also be used to close a pipe, but doesn't return the status.  File: guile-ref.info, Node: Networking, Next: System Identification, Prev: Pipes, Up: Top Networking ********** * Menu: * Networking Databases:: * Network sockets::