  
  [1X3. Functions directly available from the C library[0X
  
  The  following  functions  from  the  C  library  are  made available as [5XGAP[0X
  functions:
  
  [10Xaccept[0X,  [10Xbind[0X,  [10Xchdir[0X,  [10Xchmod[0X,  [10Xchown[0X, [10Xclose[0X, [10Xclosedir[0X, [10Xconnect[0X, [10Xcreat[0X, [10Xdup[0X,
  [10Xdup2[0X,  [10Xexecv[0X,  [10Xexecve[0X,  [10Xexecvp[0X,  [10Xexit[0X,  [10Xfchmod[0X,  [10Xfchown[0X, [10Xfcntl[0X, [10Xfork[0X, [10Xfstat[0X,
  [10Xgethostbyname[0X,  [10Xgetpid[0X,  [10Xgetppid[0X,  [10Xgetsockopt[0X,  [10Xkill[0X,  [10Xlchown[0X, [10Xlink[0X, [10Xlisten[0X,
  [10Xlseek[0X,  [10Xlstat[0X,  [10Xmkdir[0X,  [10Xmkfifo[0X,  [10Xmknod[0X,  [10Xopen[0X, [10Xopendir[0X, [10Xpipe[0X, [10Xread[0X, [10Xreaddir[0X,
  [10Xreadlink[0X,  [10Xrecv[0X,  [10Xrecvfrom[0X, [10Xrename[0X, [10Xrewinddir[0X, [10Xrmdir[0X, [10Xseekdir[0X, [10Xselect[0X, [10Xsend[0X,
  [10Xsendto[0X, [10Xsetsockopt[0X, [10Xsocket[0X, [10Xstat[0X, [10Xsymlink[0X, [10Xtelldir[0X, [10Xunlink[0X, [10Xwrite[0X.
  
  Use the [10Xman[0X command in your shell to get information about these functions.
  
  For  each  of  these  functions there is a corresponding [5XGAP[0X global function
  with  the  prefix  [10XIO_[0X  before  its  name. Apart from minor differences (see
  below) they take exactly the same arguments as their C counterparts. Strings
  must  be  specified  as  [5XGAP[0X strings and integers as [5XGAP[0X immediate integers.
  Return values are in general the same as for the C counterparts. However, an
  error  condition  is  indicated  by the value [10Xfail[0X instead of -1, and if the
  result can only be success or failure, [10Xtrue[0X indicates success.
  
  All errors are reported via the [2XLastSystemError[0X ([14XReference: LastSystemError[0X)
  function.
  
  In  the  C  library a lot of integers are defined as macros in header files.
  All  the necessary values for the above functions are bound to their name in
  the global [10XIO[0X record.
  
  [13XWarning:[0X  Existence  of  many  of  these functions and constants is platform
  dependent.  The  compilation  process checks existence and this leads to the
  situation  that  on  the [5XGAP[0X levels the functions and constants are there or
  not.  If  you  want  to  develop  platform  independent  [5XGAP[0X code using this
  package, then you have to check for existence of the functions and constants
  you need.
  
  
  [1X3.1 Differences in arguments - an overview[0X
  
  The  [10Xopen[0X  function  has to be called with three arguments. The version with
  two arguments is not available on the [5XGAP[0X level.
  
  The [10Xread[0X function takes four arguments: [3Xfd[0X is an integer file descriptor, [3Xst[0X
  is  a  [5XGAP[0X  string, [3Xoffset[0X is an offset within this string (zero based), and
  [3Xcount[0X  is  the  maximal number of bytes to read. The data is read and stored
  into  the  string  [3Xst[0X,  starting at position [3Xoffset[0X+1. The string [3Xst[0X is made
  long  enough, such that [3Xcount[0X bytes would fit into it, beginning at position
  [3Xoffset[0X+1. The number of bytes read is returned or [10Xfail[0X in case of an error.
  
  The  [10Xwrite[0X  function  is  similar,  it  also  takes four arguments: [3Xfd[0X is an
  integer file descriptor, [3Xst[0X is a [5XGAP[0X string, [3Xoffset[0X is an offset within this
  string  (zero  based),  and  [3Xcount[0X is the number of bytes to write, starting
  from  position  [3Xoffset[0X+1  in  the  string [3Xst[0X. The number of bytes written is
  returned, or a [10Xfail[0X in case of an error.
  
  The [10Xopendir[0X function only returns [10Xtrue[0X or [10Xfail[0X.
  
  The  [10Xreaddir[0X  function  takes  no  argument. It reads the directory that was
  specified  in  the  last call to [10Xopendir[0X. It just returns a string, which is
  the  name  of  a  file  or  subdirectory  in the corresponding directory. It
  returns  [10Xfalse[0X  after the last file name in the directory or [10Xfail[0X in case of
  an error.
  
  The  [10Xclosedir[0X  function takes no argument. It should be called after [10Xreaddir[0X
  returned [10Xfalse[0X or [10Xfail[0X to avoid excessive use of file descriptors.
  
  The functions [10Xstat[0X, [10Xfstat[0X, and [10Xlstat[0X only take one argument and return a [5XGAP[0X
  record that has the same entries as a [10Xstruct stat[0X.
  
  The  function [10Xsocket[0X can optionally take a string as third argument. In that
  case it automatically calls [10Xgetprotobyname[0X to look up the protocol name.
  
  The  functions  [10Xbind[0X  and  [10Xconnect[0X  take only one string argument as address
  field, because the string already encodes the length.
  
  There   are   two  convenience  functions  [2XIO_make_sockaddr_in[0X  ([14X3.3-1[0X)  and
  [2XIO_MakeIPAddressPort[0X  ([14X4.3-5[0X)  to create such addresses. The first takes two
  arguments  [3Xaddr[0X and [3Xport[0X, where [3Xaddr[0X is a string of length 4, containing the
  4  bytes  of  the  IP  address and [3Xport[0X is a port number as [5XGAP[0X integer. The
  function  [2XIO_MakeIPAddressPort[0X  ([14X4.3-5[0X)  takes  the  same arguments, but the
  first  can  be  a  string  containing  an  IP  address  in dot notation like
  "137.226.152.77".
  
  The  [10Xsetsockopt[0X  function  has  no argument [3Xoptlen[0X. The length of the string
  [3Xoptval[0X is taken.
  
  The [10Xselect[0X function works as the function [10XUNIXSelect[0X in the [5XGAP[0X library.
  
  As  of  now, the file locking mechanisms of [10Xfcntl[0X using [10Xstruct flock[0X are not
  yet implemented on the [5XGAP[0X level.
  
  
  [1X3.2 The low-level functions in detail[0X
  
  Nearly  all  of this functions return an integer result in the C library. On
  the  [5XGAP[0X  level this is either returned as a non-negative integer in case of
  success  or  as  [9Xfail[0X  in case of an error (where on the C level -1 would be
  returned).  If  the  integer can only be 0 for "no error" this is changed to
  [9Xtrue[0X on the [5XGAP[0X level.
  
  [1X3.2-1 IO_accept[0X
  
  [2X> IO_accept( [0X[3Xfd, addr[0X[2X ) ____________________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Accepts  an incoming network connection. For details see "[10Xman 2 accept[0X". The
  argument  [3Xaddr[0X can be made with [2XIO_make_sockaddr_in[0X ([14X3.3-1[0X) and contains its
  length such that no third argument is necessary.
  
  [1X3.2-2 IO_bind[0X
  
  [2X> IO_bind( [0X[3Xfd, my_addr[0X[2X ) ___________________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Binds  a  local  address  to  a  socket.  For  details see "[10Xman 2 bind[0X". The
  argument  [3Xmy_addr[0X  can be made with [2XIO_make_sockaddr_in[0X ([14X3.3-1[0X) and contains
  its length such that no third argument is necessary.
  
  [1X3.2-3 IO_chdir[0X
  
  [2X> IO_chdir( [0X[3Xpath[0X[2X ) _________________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Changes the current working directory. For details see "[10Xman 2 chdir[0X".
  
  [1X3.2-4 IO_chmod[0X
  
  [2X> IO_chmod( [0X[3Xpathname, mode[0X[2X ) _______________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Changes the mode of a file. For details see "[10Xman 2 chmod[0X".
  
  [1X3.2-5 IO_chown[0X
  
  [2X> IO_chown( [0X[3Xpath, owner, group[0X[2X ) ___________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Sets owner and/or group of file. For details see "[10Xman 2 chown[0X".
  
  [1X3.2-6 IO_close[0X
  
  [2X> IO_close( [0X[3Xfd[0X[2X ) ___________________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Closes a file descriptor. For details see "[10Xman 2 close[0X".
  
  [1X3.2-7 IO_closedir[0X
  
  [2X> IO_closedir( [0X[3X[0X[2X ) __________________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Closes  a  directory.  For  details  see "[10Xman 3 closedir[0X". Has no arguments,
  because we only have one [10XDIR[0X struct in the C part.
  
  [1X3.2-8 IO_connect[0X
  
  [2X> IO_connect( [0X[3Xfd, serv_addr[0X[2X ) ______________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Connects  to  a remote socket. For details see "[10Xman 2 connect[0X". The argument
  [3Xserv_addr[0X  can  be  made  with  [2XIO_make_sockaddr_in[0X ([14X3.3-1[0X) and contains its
  length such that no third argument is necessary.
  
  [1X3.2-9 IO_creat[0X
  
  [2X> IO_creat( [0X[3Xpathname, mode[0X[2X ) _______________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Creates a new file. For details see "[10Xman 2 creat[0X".
  
  [1X3.2-10 IO_dup[0X
  
  [2X> IO_dup( [0X[3Xoldfd[0X[2X ) __________________________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Duplicates a file descriptor. For details see "[10Xman 2 dup[0X".
  
  [1X3.2-11 IO_dup2[0X
  
  [2X> IO_dup2( [0X[3Xoldfd, newfd[0X[2X ) __________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Duplicates a file descriptor to a new one. For details see "[10Xman 2 dup2[0X".
  
  [1X3.2-12 IO_execv[0X
  
  [2X> IO_execv( [0X[3Xpath, argv[0X[2X ) ___________________________________________[0Xfunction
  [6XReturns:[0X  [9Xfail[0X or does not return
  
  Replaces  the  process  with another process. For details see "[10Xman 3 execv[0X".
  The  argument [3Xargv[0X is a list of strings. The called program does not have to
  be the first argument in this list.
  
  [1X3.2-13 IO_execve[0X
  
  [2X> IO_execve( [0X[3Xpath, argv, envp[0X[2X ) ____________________________________[0Xfunction
  [6XReturns:[0X  [9Xfail[0X or does not return
  
  Replaces  the  process with another process. For details see "[10Xman 3 execve[0X".
  The  arguments  [3Xargv[0X  and [3Xenvp[0X are both lists of strings. The called program
  does  not  have  to be the first argument in [3Xargv[0X. The list [3Xenvp[0X can be made
  with  [2XIO_MakeEnvList[0X  ([14X4.3-7[0X)  from  a  record  acquired from [2XIO_Environment[0X
  ([14X4.3-6[0X) and modified later.
  
  [1X3.2-14 IO_execvp[0X
  
  [2X> IO_execvp( [0X[3Xpath, argv[0X[2X ) __________________________________________[0Xfunction
  [6XReturns:[0X  [9Xfail[0X or does not return
  
  Replaces  the  process with another process. For details see "[10Xman 3 execvp[0X".
  The  argument [3Xargv[0X is a list of strings. The called program does not have to
  be the first argument in this list.
  
  [1X3.2-15 IO_exit[0X
  
  [2X> IO_exit( [0X[3Xstatus[0X[2X ) ________________________________________________[0Xfunction
  
  Stops  process  immediately  with return code [3Xstatus[0X. For details see "[10Xman 2
  exit[0X". The argument [3Xstatus[0X must be an integer. Does not return.
  
  [1X3.2-16 IO_fchmod[0X
  
  [2X> IO_fchmod( [0X[3Xfd, mode[0X[2X ) ____________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Changes mode of an opened file. For details see "[10Xman 2 fchmod[0X".
  
  [1X3.2-17 IO_fchown[0X
  
  [2X> IO_fchown( [0X[3Xfd, owner, group[0X[2X ) ____________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Changes  owner  and/or  group  of  an  opened  file.  For details see "[10Xman 2
  fchown[0X".
  
  [1X3.2-18 IO_fcntl[0X
  
  [2X> IO_fcntl( [0X[3Xfd, cmd, arg[0X[2X ) _________________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Does  various  things  to  control  the  behaviour of a file descriptor. For
  details see "[10Xman 2 fcntl[0X".
  
  [1X3.2-19 IO_fork[0X
  
  [2X> IO_fork( [0X[3X[0X[2X ) ______________________________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Forks  off a child process, which is an identical copy. For details see "[10Xman
  2  fork[0X".  Note  that if you want to use the [2XIO_WaitPid[0X ([14X3.2-55[0X) function to
  wait  or  check for the termination of child processes, you have to activate
  the  SIGCHLD  handler  for  this  package  beforehand  by using the function
  [2XIO_InstallSIGCHLDHandler[0X  ([14X3.3-3[0X).  Note  further that after that you cannot
  use       the       function       [2XInputOutputLocalProcess[0X       ([14XReference:
  InputOutputLocalProcess[0X)  any  more, since its SIGCHLD handler does not work
  any   more.   To   switch  back  to  that  functionality  use  the  function
  [2XIO_RestoreSIGCHLDHandler[0X ([14X3.3-4[0X).
  
  [1X3.2-20 IO_fstat[0X
  
  [2X> IO_fstat( [0X[3Xfd[0X[2X ) ___________________________________________________[0Xfunction
  [6XReturns:[0X  a record or [9Xfail[0X
  
  Returns  the  file  meta  data  for  an  opened file. For details see "[10Xman 2
  fstat[0X". A [5XGAP[0X record is returned with the same entries than a [10Xstruct stat[0X.
  
  [1X3.2-21 IO_gethostbyname[0X
  
  [2X> IO_gethostbyname( [0X[3Xname[0X[2X ) _________________________________________[0Xfunction
  [6XReturns:[0X  a record or [9Xfail[0X
  
  Return  host  information  by name. For details see "[10Xman 3 gethostbyname[0X". A
  [5XGAP[0X record is returned with all the relevant information about the host.
  
  [1X3.2-22 IO_getpid[0X
  
  [2X> IO_getpid( [0X[3X[0X[2X ) ____________________________________________________[0Xfunction
  [6XReturns:[0X  an integer
  
  Returns the process ID of the current process as an integer. For details see
  "[10Xman 2 getpid[0X".
  
  [1X3.2-23 IO_getppid[0X
  
  [2X> IO_getppid( [0X[3X[0X[2X ) ___________________________________________________[0Xfunction
  [6XReturns:[0X  an integer
  
  Returns  the  process ID of the parent of the current process as an integer.
  For details see "[10Xman 2 getppid[0X".
  
  [1X3.2-24 IO_getsockopt[0X
  
  [2X> IO_getsockopt( [0X[3Xfd, level, optname, optval[0X[2X ) ______________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Get  a  socket  option.  For  details  see "[10Xman 2 getsockopt[0X". Note that the
  argument  [3Xoptval[0X  carries  its  length  around, such that no 5th argument is
  necessary.
  
  [1X3.2-25 IO_kill[0X
  
  [2X> IO_kill( [0X[3Xpid, sig[0X[2X ) ______________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Sends  the  signal  [3Xsig[0X  to the process with process ID [3Xpid[0X. For details see
  "[10Xman  2  kill[0X".  The  signal numbers available can be found in the global [10XIO[0X
  record with names like [10XSIGTERM[0X.
  
  [1X3.2-26 IO_lchown[0X
  
  [2X> IO_lchown( [0X[3Xpath, owner, group[0X[2X ) __________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Changes  owner  and/or  group of a file not following links. For details see
  "[10Xman 2 lchown[0X".
  
  [1X3.2-27 IO_link[0X
  
  [2X> IO_link( [0X[3Xoldpath, newpath[0X[2X ) ______________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Create a hard link. For details see "[10Xman 2 link[0X".
  
  [1X3.2-28 IO_listen[0X
  
  [2X> IO_listen( [0X[3Xfd, backlog[0X[2X ) _________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Switch a socket to listening. For details see "[10Xman 2 listen[0X".
  
  [1X3.2-29 IO_lseek[0X
  
  [2X> IO_lseek( [0X[3Xfd, offset, whence[0X[2X ) ___________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Seeks within an open file. For details see "[10Xman 2 lseek[0X".
  
  [1X3.2-30 IO_lstat[0X
  
  [2X> IO_lstat( [0X[3Xname[0X[2X ) _________________________________________________[0Xfunction
  [6XReturns:[0X  a record or [9Xfail[0X
  
  Returns  the  file meta data for a file not following links. For details see
  "[10Xman  2 lstat[0X". A [5XGAP[0X record is returned with the same entries than a [10Xstruct
  stat[0X.
  
  [1X3.2-31 IO_mkdir[0X
  
  [2X> IO_mkdir( [0X[3Xpathname, mode[0X[2X ) _______________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Creates a directory. For details see "[10Xman 2 mkdir[0X".
  
  [1X3.2-32 IO_mkfifo[0X
  
  [2X> IO_mkfifo( [0X[3Xpathname, mode[0X[2X ) ______________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Creates a FIFO special file (a named pipe). For details see "[10Xman 3 mkfifo[0X".
  
  [1X3.2-33 IO_mknod[0X
  
  [2X> IO_mknod( [0X[3Xpathname, mode, dev[0X[2X ) __________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Create a special or ordinary file. For details see "[10Xman 2 mknod[0X".
  
  [1X3.2-34 IO_open[0X
  
  [2X> IO_open( [0X[3Xpathname, flags, mode[0X[2X ) _________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Open  and  possibly  create  a file or device. For details see "[10Xman 2 open[0X".
  Only the variant with 3 arguments can be used.
  
  [1X3.2-35 IO_opendir[0X
  
  [2X> IO_opendir( [0X[3Xname[0X[2X ) _______________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Opens  a  directory. For details see "[10Xman 3 opendir[0X". Note that only [9Xtrue[0X is
  returned  if  everything is OK, since only one [10XDIR[0X struct is stored on the C
  level and thus only one directory can be open at any time.
  
  [1X3.2-36 IO_pipe[0X
  
  [2X> IO_pipe( [0X[3X[0X[2X ) ______________________________________________________[0Xfunction
  [6XReturns:[0X  a record or [9Xfail[0X
  
  Create  a pair of file descriptors with a pipe between them. For details see
  "[10Xman  2  pipe[0X". Note that no arguments are needed. The result is either [9Xfail[0X
  in case of an error or a record with two components [10Xtoread[0X and [10Xtowrite[0X bound
  to the two filedescriptors for reading and writing respectively.
  
  [1X3.2-37 IO_read[0X
  
  [2X> IO_read( [0X[3Xfd, st, offset, count[0X[2X ) _________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Reads from file descriptor. For details see "[10Xman 2 read[0X". Note that there is
  one  more  argument [3Xoffset[0X to specify at which position in the string [3Xst[0X the
  read  data should be stored. Note that [3Xoffset[0X zero means at the beginning of
  the  string, which is position 1 in [5XGAP[0X. The number of bytes read or [9Xfail[0X in
  case of an error is returned.
  
  [1X3.2-38 IO_readdir[0X
  
  [2X> IO_readdir( [0X[3X[0X[2X ) ___________________________________________________[0Xfunction
  [6XReturns:[0X  a string or [9Xfail[0X or [9Xfalse[0X
  
  Reads  from  a  directory.  For  details  see  "[10Xman 2 readdir[0X". Note that no
  argument  is  required as we have only one [10XDIR[0X struct on the C level. If the
  directory  is  read completely [9Xfalse[0X is returned, and otherwise a string. An
  error is indicated by [9Xfail[0X.
  
  [1X3.2-39 IO_readlink[0X
  
  [2X> IO_readlink( [0X[3Xpath, buf, bufsize[0X[2X ) ________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Reads the value of a symbolic link. For details see "[10Xman 2 readlink[0X". [3Xbuf[0X is
  modified. The new length of [3Xbuf[0X is returned or [9Xfail[0X in case of an error.
  
  [1X3.2-40 IO_recv[0X
  
  [2X> IO_recv( [0X[3Xfd, st, offset, len, flags[0X[2X ) ____________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Receives  data  from  a  socket.  For  details  see  "[10Xman  2 recv[0X". Note the
  additional  argument  [3Xoffset[0X  which  plays  the same role as for the [2XIO_read[0X
  ([14X3.2-37[0X) function.
  
  [1X3.2-41 IO_recvfrom[0X
  
  [2X> IO_recvfrom( [0X[3Xfd, st, offset, len, flags, addr[0X[2X ) __________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Receives  data  from  a  socket  with  given address. For details see "[10Xman 2
  recvfrom[0X".  Note the additional argument [3Xoffset[0X which plays the same role as
  for  the  [2XIO_read[0X  ([14X3.2-37[0X)  function.  The  argument  [3Xaddr[0X can be made with
  [2XIO_make_sockaddr_in[0X  ([14X3.3-1[0X)  and  contains  its  length  such  that  no 7th
  argument is necessary.
  
  [1X3.2-42 IO_rename[0X
  
  [2X> IO_rename( [0X[3Xoldpath, newpath[0X[2X ) ____________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Renames a file or moves it. For details see "[10Xman 2 rename[0X".
  
  [1X3.2-43 IO_rewinddir[0X
  
  [2X> IO_rewinddir( [0X[3X[0X[2X ) _________________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Rewinds  a  directory.  For  details  see  "[10Xman  2  rewinddir[0X". Note that no
  argument  is required as we have only one [10XDIR[0X struct on the C level. Returns
  [9Xfail[0X only, if no prior [2XIO_opendir[0X ([14X3.2-35[0X) command has been called.
  
  [1X3.2-44 IO_rmdir[0X
  
  [2X> IO_rmdir( [0X[3Xname[0X[2X ) _________________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Removes an empty directory. For details see "[10Xman 2 rmdir[0X".
  
  [1X3.2-45 IO_seekdir[0X
  
  [2X> IO_seekdir( [0X[3Xoffset[0X[2X ) _____________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Sets the position of the next readdir call. For details see "[10Xman 3 seekdir[0X".
  Note  that  no second argument is required as we have only one [10XDIR[0X struct on
  the C level.
  
  [1X3.2-46 IO_select[0X
  
  [2X> IO_select( [0X[3Xinlist, outlist, exclist, timeoutsec, timeoutusec[0X[2X ) ___[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Used  for  I/O multiplexing. For details see "[10Xman 2 select[0X". [3Xinlist[0X, [3Xoutlist[0X
  and  [3Xexclist[0X  are  lists  of  filedescriptors,  which  are  modified. If the
  corresponding file descriptor is not yet ready, it is replaced by [9Xfail[0X.
  
  [1X3.2-47 IO_send[0X
  
  [2X> IO_send( [0X[3Xfd, st, offset, len, flags[0X[2X ) ____________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Sends  data  to  a  socket.  For  details  see  "[10Xman  2 send[0X". Note that the
  additional argument [3Xoffset[0X specifies the position of the data to send within
  the  string  [3Xst[0X.  It is zero based, meaning that zero indicates the start of
  the string, which is position 1 in [5XGAP[0X.
  
  [1X3.2-48 IO_sendto[0X
  
  [2X> IO_sendto( [0X[3Xfd, st, offset, len, flags, addr[0X[2X ) ____________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Sends  data  to  a  socket.  For  details  see "[10Xman 2 sendto[0X". Note that the
  additional argument [3Xoffset[0X specifies the position of the data to send within
  the  string  [3Xst[0X.  It is zero based, meaning that zero indicates the start of
  the  string,  which is position 1 in [5XGAP[0X. The argument [3Xaddr[0X can be made with
  [2XIO_make_sockaddr_in[0X  ([14X3.3-1[0X)  and  contains  its  length  such  that  no 7th
  argument is necessary.
  
  [1X3.2-49 IO_setsockopt[0X
  
  [2X> IO_setsockopt( [0X[3Xfd, level, optname, optval[0X[2X ) ______________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Sets  a  socket  option.  For  details see "[10Xman 2 setsockopt[0X". Note that the
  argument  [3Xoptval[0X  carries  its  length  around, such that no 5th argument is
  necessary.
  
  [1X3.2-50 IO_socket[0X
  
  [2X> IO_socket( [0X[3Xdomain, type, protocol[0X[2X ) ______________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Creates  a  socket,  an  endpoint  for communication. For details see "[10Xman 2
  socket[0X".  There  is  one little special: On systems that have [10Xgetprotobyname[0X
  you  can  pass  a  string  as third argument [3Xprotocol[0X which is automatically
  looked up by [10Xgetprotobyname[0X.
  
  [1X3.2-51 IO_stat[0X
  
  [2X> IO_stat( [0X[3Xpathname[0X[2X ) ______________________________________________[0Xfunction
  [6XReturns:[0X  a record or [9Xfail[0X
  
  Returns  the  file  metadata  for  the file [3Xpathname[0X. For details see "[10Xman 2
  stat[0X". A [5XGAP[0X record is returned with the same entries than a [10Xstruct stat[0X.
  
  [1X3.2-52 IO_symlink[0X
  
  [2X> IO_symlink( [0X[3Xoldpath, newpath[0X[2X ) ___________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Creates a symbolic link. For details see "[10Xman 2 symlink[0X".
  
  [1X3.2-53 IO_telldir[0X
  
  [2X> IO_telldir( [0X[3X[0X[2X ) ___________________________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Return  current location in directory. For details see "[10Xman 3 telldir[0X". Note
  that  no second argument is required as we have only one [10XDIR[0X struct on the C
  level.
  
  [1X3.2-54 IO_unlink[0X
  
  [2X> IO_unlink( [0X[3Xpathname[0X[2X ) ____________________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfail[0X
  
  Delete  a  name  and  possibly the file it refers to. For details see "[10Xman 2
  unlink[0X".
  
  [1X3.2-55 IO_WaitPid[0X
  
  [2X> IO_WaitPid( [0X[3Xpid, wait[0X[2X ) __________________________________________[0Xfunction
  [6XReturns:[0X  a record or [9Xfail[0X
  
  Waits  for  the  termination  of  a  child  process.  For details see "[10Xman 2
  waitpid[0X".  Returns  a  [5XGAP[0X record describing PID and exit status. The second
  argument  [3Xwait[0X  must  be  either  [9Xtrue[0X or [9Xfalse[0X. In the first case, the call
  blocks  until new information about a terminated child process is available.
  In  the  second  case  no  such  waiting  is  performed,  the  call  returns
  immediately. See [2XIO_fork[0X ([14X3.2-19[0X).
  
  [1X3.2-56 IO_write[0X
  
  [2X> IO_write( [0X[3Xfd, st, offset, count[0X[2X ) ________________________________[0Xfunction
  [6XReturns:[0X  an integer or [9Xfail[0X
  
  Writes  to  a  file descriptor. For details see "[10Xman 2 write[0X". Note that the
  additional argument [3Xoffset[0X specifies the position of the data to send within
  the  string  [3Xst[0X.  It is zero based, meaning that zero indicates the start of
  the string, which is position 1 in [5XGAP[0X.
  
  
  [1X3.3 Further C level functions[0X
  
  The following functions do not correspond to functions in the C library, but
  are there to provide convenience to use other functions:
  
  [1X3.3-1 IO_make_sockaddr_in[0X
  
  [2X> IO_make_sockaddr_in( [0X[3Xip, port[0X[2X ) __________________________________[0Xfunction
  [6XReturns:[0X  a string or [9Xfail[0X
  
  Makes  a struct [10Xsockaddr_in[0X from IP address and port. The IP address must be
  given  as  a  string  of  length  four, containing the four bytes of an IPv4
  address  in  natural order. The port must be a port number. Returns a string
  containing  the  struct, which can be given to all functions above having an
  address argument.
  
  [1X3.3-2 IO_environ[0X
  
  [2X> IO_environ( [0X[3X[0X[2X ) ___________________________________________________[0Xfunction
  [6XReturns:[0X  a list of strings
  
  For  details see "[10Xman environ[0X". Returns the current environment as a list of
  strings of the form "key=value".
  
  [1X3.3-3 IO_InstallSIGCHLDHandler[0X
  
  [2X> IO_InstallSIGCHLDHandler( [0X[3X[0X[2X ) _____________________________________[0Xfunction
  [6XReturns:[0X  [9Xtrue[0X or [9Xfalse[0X
  
  Installs  our  SIGCHLD  handler. This functions works as an idempotent. That
  is,  calling  it  twice does exactly the same as calling it once. It returns
  [9Xtrue[0X  when  it  is called for the first time since then a pointer to the old
  signal handler is stored in a global variable. See [2XIO_fork[0X ([14X3.2-19[0X).
  
  [1X3.3-4 IO_RestoreSIGCHLDHandler[0X
  
  [2X> IO_RestoreSIGCHLDHandler( [0X[3X[0X[2X ) _____________________________________[0Xfunction
  
  Restores the original SIGCHLD handler. This function works as an idempotent.
  That  is,  calling  it  twice  does  exactly the same as calling it once. It
  returns   [9Xtrue[0X   when  it  is  called  for  the  first  time  after  calling
  [2XIO_InstallSIGCHLDHandler[0X ([14X3.3-3[0X). See [2XIO_fork[0X ([14X3.2-19[0X).
  
