#
| E2BIG
| (* | Argument list too long | *) |
#
| EACCES
| (* | Permission denied | *) |
#
| EAGAIN
| (* | Resource temporarily unavailable; try again | *) |
#
| EBADF
| (* | Bad file descriptor | *) |
#
| EBUSY
| (* | Resource unavailable | *) |
#
| ECHILD
| (* | No child process | *) |
#
| EDEADLK
| (* | Resource deadlock would occur | *) |
#
| EDOM
| (* | Domain error for math functions, etc. | *) |
#
| EEXIST
| (* | File exists | *) |
#
| EFAULT
| (* | Bad address | *) |
#
| EFBIG
| (* | File too large | *) |
#
| EINTR
| (* | Function interrupted by signal | *) |
#
| EINVAL
| (* | Invalid argument | *) |
#
| EIO
| (* | Hardware I/O error | *) |
#
| EISDIR
| (* | Is a directory | *) |
#
| EMFILE
| (* | Too many open files by the process | *) |
#
| EMLINK
| (* | Too many links | *) |
#
| ENAMETOOLONG
| (* | Filename too long | *) |
#
| ENFILE
| (* | Too many open files in the system | *) |
#
| ENODEV
| (* | No such device | *) |
#
| ENOENT
| (* | No such file or directory | *) |
#
| ENOEXEC
| (* | Not an executable file | *) |
#
| ENOLCK
| (* | No locks available | *) |
#
| ENOMEM
| (* | Not enough memory | *) |
#
| ENOSPC
| (* | No space left on device | *) |
#
| ENOSYS
| (* | Function not supported | *) |
#
| ENOTDIR
| (* | Not a directory | *) |
#
| ENOTEMPTY
| (* | Directory not empty | *) |
#
| ENOTTY
| (* | Inappropriate I/O control operation | *) |
#
| ENXIO
| (* | No such device or address | *) |
#
| EPERM
| (* | Operation not permitted | *) |
#
| EPIPE
| (* | Broken pipe | *) |
#
| ERANGE
| (* | Result too large | *) |
#
| EROFS
| (* | Read-only file system | *) |
#
| ESPIPE
| (* | Invalid seek e.g. on a pipe | *) |
#
| ESRCH
| (* | No such process | *) |
#
| EXDEV
| (* | Invalid link | *) |
#
| EWOULDBLOCK
| (* | Operation would block | *) |
#
| EINPROGRESS
| (* | Operation now in progress | *) |
#
| EALREADY
| (* | Operation already in progress | *) |
#
| ENOTSOCK
| (* | Socket operation on non-socket | *) |
#
| EDESTADDRREQ
| (* | Destination address required | *) |
#
| EMSGSIZE
| (* | Message too long | *) |
#
| EPROTOTYPE
| (* | Protocol wrong type for socket | *) |
#
| ENOPROTOOPT
| (* | Protocol not available | *) |
#
| EPROTONOSUPPORT
| (* | Protocol not supported | *) |
#
| ESOCKTNOSUPPORT
| (* | Socket type not supported | *) |
#
| EOPNOTSUPP
| (* | Operation not supported on socket | *) |
#
| EPFNOSUPPORT
| (* | Protocol family not supported | *) |
#
| EAFNOSUPPORT
| (* | Address family not supported by protocol family | *) |
#
| EADDRINUSE
| (* | Address already in use | *) |
#
| EADDRNOTAVAIL
| (* | Can't assign requested address | *) |
#
| ENETDOWN
| (* | Network is down | *) |
#
| ENETUNREACH
| (* | Network is unreachable | *) |
#
| ENETRESET
| (* | Network dropped connection on reset | *) |
#
| ECONNABORTED
| (* | Software caused connection abort | *) |
#
| ECONNRESET
| (* | Connection reset by peer | *) |
#
| ENOBUFS
| (* | No buffer space available | *) |
#
| EISCONN
| (* | Socket is already connected | *) |
#
| ENOTCONN
| (* | Socket is not connected | *) |
#
| ESHUTDOWN
| (* | Can't send after socket shutdown | *) |
#
| ETOOMANYREFS
| (* | Too many references: can't splice | *) |
#
| ETIMEDOUT
| (* | Connection timed out | *) |
#
| ECONNREFUSED
| (* | Connection refused | *) |
#
| EHOSTDOWN
| (* | Host is down | *) |
#
| EHOSTUNREACH
| (* | No route to host | *) |
#
| ELOOP
| (* | Too many levels of symbolic links | *) |
#
| EOVERFLOW
| (* | File size or position not representable | *) |
#
| EUNKNOWNERR of int
|
The type of error codes. Errors defined in the POSIX standard and additional errors, mostly BSD. All other errors are mapped to EUNKNOWNERR.
Raised by the system calls below when an error is encountered. The first component is the error code; the second component is the function name; the third component is the string parameter to the function, if it has one, or the empty string otherwise.
Unix_error
with a given errno, function name and argument
handle_unix_error f
runs f ()
and returns the result. If the exception
Unix_error
is raised, it prints a message describing the error and exits with code
2.
retry_until_no_eintr f
returns f ()
unless f ()
fails with EINTR
; in which
case f ()
is run again until it raises a different error or returns a value.
If you're looking for getenv
, that's in the Sys module.
Return the process environment, as an array of strings with the format ``variable=value''.
Unix.putenv ~key ~data
sets the value associated to a
variable in the process environment.
key
is the name of the environment variable,
and data
its new associated value.
unsetenv name
deletes the variable name
from the environment.
EINVAL name
contained an ’=’ or an '\000' character.
The termination status of a process.
of_unix
assumes that any signal numbers in the incoming value are O'Caml internal
signal numbers.
of_unix
assumes that any signal numbers in the incoming value are O'Caml internal
signal numbers.
exec ~prog ~args ?search_path ?env
execs prog
with args
. If use_path = true
(the default) and prog
doesn't contain a slash, then exec
searches the PATH
environment variable for prog
. If env
is supplied, it is used as the environment
when prog
is executed.
The first element in args should be the program itself; the correct way to call exec
is:
exec ~prog ~args:prog; arg1; arg2; ...
()
fork_exec ~prog ~args ?use_path ?env ()
forks and execs prog
with args
in the
child process, returning the child pid to the parent.
fork ()
forks a new process. The return value indicates whether we are continuing
in the child or the parent, and if the parent, includes the child's process id.
wait{,_nohang,_untraced,_nohang_untraced} ?restart wait_on
is a family of functions
that wait on a process to exit (normally or via a signal) or be stopped by a signal
(if untraced
is used). The wait_on
argument specifies which processes to wait on.
The nohang
variants return None
immediately if no such process exists. If
nohang
is not used, waitpid
will block until one of the desired processes exits.
The non-nohang variants have a restart
flag with (default true) that causes the
system call to be retried upon EAGAIN|EINTR. The nohang variants do not have this
flag because they don't block.
waitpid pid
waits for child process pid
to terminate, and returns its exit status.
waitpid_exn
is like waitpid
, except it only returns if the child exits with status
zero, and raises if the child terminates in any other way.
Execute the given command, wait until it terminates, and return
its termination status. The string is interpreted by the shell
/bin/sh
and therefore can contain redirections, quotes, variables,
etc. The result WEXITED 127
indicates that the shell couldn't
be executed.
Return the pid of the process.
Return the pid of the parent process.
Return the pid of the parent process, if you're really sure you're never going to be the init process.
Change the process priority. The integer argument is added to the ``nice'' value. (Higher values of the ``nice'' value mean lower priorities.) Return the new nice value.
The abstract type of file descriptors.
The flags to UnixLabels.openfile.
#
| O_RDONLY
| (* | Open for reading | *) |
#
| O_WRONLY
| (* | Open for writing | *) |
#
| O_RDWR
| (* | Open for reading and writing | *) |
#
| O_NONBLOCK
| (* | Open in non-blocking mode | *) |
#
| O_APPEND
| (* | Open for append | *) |
#
| O_CREAT
| (* | Create if nonexistent | *) |
#
| O_TRUNC
| (* | Truncate to 0 length if existing | *) |
#
| O_EXCL
| (* | Fail if existing | *) |
#
| O_NOCTTY
| (* | Don't make this dev a controlling tty | *) |
#
| O_DSYNC
| (* | Writes complete as `Synchronised I/O data integrity completion' | *) |
#
| O_SYNC
| (* | Writes complete as `Synchronised I/O file integrity completion' | *) |
#
| O_RSYNC
| (* | Reads complete as writes (depending on O_SYNC/O_DSYNC) | *) |
#
| O_SHARE_DELETE
| (* | Windows only: allow the file to be deleted while still open | *) |
#
| O_CLOEXEC
| (* | Set the close-on-exec flag on the descriptor returned by openfile | *) |
The type of file access rights.
Open the named file with the given flags. Third argument is the permissions to give to the file if it is created. Return a file descriptor on the named file. Default permissions 0o644.
Open_flags.t
represents the flags associated with a file descriptor in the
open-file-descriptor table. It deals with the same thing as OCaml's open_flag
type; however, it uses Core's Flags
approach and the underlying integer bitmask
representation, and so interoperates more smoothly with C.
access mode.
These three flags are not individual bits like flags usually are. The access mode
is represented by the lower two bits of the Open_flags.t
. A particular
Open_flags.t
should include exactly one access mode. Combining different
Open_flags.t
's using flags operations (e.g +
) is only sensible if they have the
same access mode.
fcntl_getfl fd
gets the current flags for fd
from the open-file-descriptor table
via the system call fcntl(fd, F_GETFL)
. See "man fcntl".
fcntl_setfl fd flags
sets the flags for fd
in the open-file-descriptor table via
the system call fcntl(fd, F_SETFL, flags)
. See "man fcntl". As per the Linux man
page, on Linux this only allows append
and nonblock
to be set.
with_file file ~mode ~perm ~f
opens file
, and applies f
to the resulting file
descriptor. When f
finishes (or raises), with_file
closes the descriptor and
returns the result of f
(or raises).
read fd buff ofs len
reads len
characters from descriptor
fd
, storing them in string buff
, starting at position ofs
in string buff
. Return the number of characters actually read.
write fd buff ofs len
writes len
characters to descriptor
fd
, taking them from string buff
, starting at position ofs
in string buff
. Return the number of characters actually
written.
When an error is reported some characters might have already been
written. Use single_write
instead to ensure that this is not the
case.
WARNING: write is an interruptible call and has no way to handle EINTR properly. You should most probably be using single write.
Same as write
but ensures that all errors are reported and
that no character has ever been written when an error is reported.
Create an input channel reading from the given descriptor.
The channel is initially in binary mode; use
set_binary_mode_in ic false
if text mode is desired.
Create an output channel writing on the given descriptor.
The channel is initially in binary mode; use
set_binary_mode_out oc false
if text mode is desired.
Return the descriptor corresponding to an input channel.
Return the descriptor corresponding to an output channel.
#
| SEEK_SET
| (* | indicates positions relative to the beginning of the file | *) |
#
| SEEK_CUR
| (* | indicates positions relative to the current position | *) |
#
| SEEK_END
|
POSITIONING modes for UnixLabels.lseek.
Set the current position for a file descriptor
Truncates the named file to the given size.
Truncates the file corresponding to the given descriptor to the given size.
#
st_dev
| : int | ; | (* | Device number | *) |
#
st_ino
| : int | ; | (* | Inode number | *) |
#
st_kind
| : file_kind | ; | (* | Kind of the file | *) |
#
st_perm
| : file_perm | ; | (* | Access rights | *) |
#
st_nlink
| : int | ; | (* | Number of links | *) |
#
st_uid
| : int | ; | (* | User id of the owner | *) |
#
st_gid
| : int | ; | (* | Group ID of the file's group | *) |
#
st_rdev
| : int | ; | (* | Device minor number | *) |
#
st_size
| : int64 | ; | (* | Size in bytes | *) |
#
st_atime
| : float | ; | (* | Last access time | *) |
#
st_mtime
| : float | ; | (* | Last modification time | *) |
#
st_ctime
| : float | ; | (* | Last status change time | *) |
The informations returned by the UnixLabels.stat calls.
Same as UnixLabels.stat, but in case the file is a symbolic link, return the information for the link itself.
Return the information for the file associated with the given descriptor.
#
st_dev
| : int | ; | (* | Device number | *) |
#
st_ino
| : int | ; | (* | Inode number | *) |
#
st_kind
| : file_kind | ; | (* | Kind of the file | *) |
#
st_perm
| : file_perm | ; | (* | Access rights | *) |
#
st_nlink
| : int | ; | (* | Number of links | *) |
#
st_uid
| : int | ; | (* | User id of the owner | *) |
#
st_gid
| : int | ; | (* | Group ID of the file's group | *) |
#
st_rdev
| : int | ; | (* | Device minor number | *) |
#
st_size
| : int | ; | (* | Size in bytes | *) |
#
st_atime
| : float | ; | (* | Last access time | *) |
#
st_mtime
| : float | ; | (* | Last modification time | *) |
#
st_ctime
| : float | ; | (* | Last status change time | *) |
The informations returned by the UnixLabels.stat calls.
Same as UnixLabels.stat, but in case the file is a symbolic link, return the information for the link itself.
Return the information for the file associated with the given descriptor.
#
| F_ULOCK
| (* | Unlock a region | *) |
#
| F_LOCK
| (* | Lock a region for writing, and block if already locked | *) |
#
| F_TLOCK
| (* | Lock a region for writing, or fail if already locked | *) |
#
| F_TEST
| (* | Test a region for other process locks | *) |
#
| F_RLOCK
| (* | Lock a region for reading, and block if already locked | *) |
#
| F_TRLOCK
|
Commands for lockf.
lockf fd cmd size
place a lock on a file_descr that prevents any other process from
calling lockf successfully on the same file. Due to a limitation in the current
implementation the length will be converted to a native int, potentially throwing an
exception if it is too large.
flock fd cmd
places or releases a lock on the fd as per the flock C call of the same
name.
Return true
if the given file descriptor refers to a terminal or
console window, false
otherwise.
Removes the named file
Removes the named file or directory
rename old new
changes the name of a file from old
to new
.
link ?force ~target ~link_name ()
creates a hard link named link_name
to the file named target
. If force
is true, an existing entry in
place of link_name
will be unlinked. This unlinking may raise a Unix
error, e.g. if the entry is a directory.
Change the owner uid and owner gid of the named file.
Change the owner uid and owner gid of an opened file.
Set the process creation mask, and return the previous mask.
Check that the process has the given permissions over the named file.
Return a new file descriptor referencing the same file as the given descriptor.
dup2 ~src ~dst
duplicates src
to dst
, closing dst
if already
opened.
Set the ``non-blocking'' flag on the given descriptor.
When the non-blocking flag is set, reading on a descriptor
on which there is temporarily no data available raises the
EAGAIN
or EWOULDBLOCK
error instead of blocking;
writing on a descriptor on which there is temporarily no room
for writing also raises EAGAIN
or EWOULDBLOCK
.
Clear the ``non-blocking'' flag on the given descriptor. See UnixLabels.set_nonblock.
Set the ``close-on-exec'' flag on the given descriptor.
A descriptor with the close-on-exec flag is automatically
closed when the current process starts another program with
one of the exec
functions.
Clear the ``close-on-exec'' flag on the given descriptor. See UnixLabels.set_close_on_exec.
Create a directory. The permissions of the created directory are (perm & ~umask & 0777). The default perm is 0777.
Create a directory recursively. The permissions of the created directory are
those granted by mkdir ~perm
.
Remove an empty directory.
Change the process working directory.
Return the name of the current working directory.
Change the process root directory.
Return the next entry in a directory.
End_of_file
when the end of the directory has been reached.
Create a pipe. The first component of the result is opened for reading, that's the exit to the pipe. The second component is opened for writing, that's the entrance to the pipe.
#
pid
| : Core_kernel.Std.Pid.t | ; | |||
#
stdin
| : File_descr.t | ; | |||
#
stdout
| : File_descr.t | ; | |||
#
stderr
| : File_descr.t | ; |
Low-level process
create_process ~prog ~args
forks a new process that
executes the program prog
with arguments args
. The function
returns the pid of the process along with file descriptors attached to
stdin, stdout, and stderr of the new process. The executable file
prog
is searched for in the path. The new process has the same
environment as the current process. Unlike in execve
the program
name is automatically passed as the first argument.
create_process_env ~prog ~args ~env
as create process, but takes an additional
parameter that extends, or replaces the current environment. No effort is made to
ensure that the keys passed in as env are unique, so if an environment variable is set
twice the second version will override the first.
High-level pipe and process management. These functions
(with UnixLabels.open_process_out and UnixLabels.open_process)
run the given command in parallel with the program,
and return channels connected to the standard input and/or
the standard output of the command. The command is interpreted
by the shell /bin/sh
(cf. system
). Warning: writes on channels
are buffered, hence be careful to call Pervasives.flush at the right times
to ensure correct synchronization.
Similar to UnixLabels.open_process, but the second argument specifies the environment passed to the command. The result is a triple of channels connected to the standard output, standard input, and standard error of the command.
#
stdin
| : Pervasives.out_channel | ; | |||
#
stdout
| : Pervasives.in_channel | ; | |||
#
stderr
| : Pervasives.in_channel | ; |
Close channels opened by UnixLabels.open_process_in, wait for the associated command to terminate, and return its termination status.
Close channels opened by UnixLabels.open_process_out, wait for the associated command to terminate, and return its termination status.
Close channels opened by UnixLabels.open_process, wait for the associated command to terminate, and return its termination status.
Close channels opened by UnixLabels.open_process_full, wait for the associated command to terminate, and return its termination status.
symlink source dest
creates the file dest
as a symbolic link
to the file source
.
Read the contents of a link.
Wait until some input/output operations become possible on some channels. The three list arguments are, respectively, a set of descriptors to check for reading (first argument), for writing (second argument), or for exceptional conditions (third argument). The fourth argument is the maximal timeout, in seconds; a negative fourth argument means no timeout (unbounded wait). The result is composed of three sets of descriptors: those ready for reading (first component), ready for writing (second component), and over which an exceptional condition is pending (third component).
#
read
| : File_descr.t list | ; | |||
#
write
| : File_descr.t list | ; | |||
#
except
| : File_descr.t list | ; |
Setting restart to true means that we want select to restart automatically on EINTR (instead of propagating the exception)...
Wait until a non-ignored, non-blocked signal is delivered.
#
tms_utime
| : float | ; | (* | User time for the process | *) |
#
tms_stime
| : float | ; | (* | System time for the process | *) |
#
tms_cutime
| : float | ; | (* | User time for the children processes | *) |
#
tms_cstime
| : float | ; | (* | System time for the children processes | *) |
The execution times (CPU times) of a process.
#
tm_sec
| : int | ; | (* | Seconds 0..59 | *) |
#
tm_min
| : int | ; | (* | Minutes 0..59 | *) |
#
tm_hour
| : int | ; | (* | Hours 0..23 | *) |
#
tm_mday
| : int | ; | (* | Day of month 1..31 | *) |
#
tm_mon
| : int | ; | (* | Month of year 0..11 | *) |
#
tm_year
| : int | ; | (* | Year - 1900 | *) |
#
tm_wday
| : int | ; | (* | Day of week (Sunday is 0) | *) |
#
tm_yday
| : int | ; | (* | Day of year 0..365 | *) |
#
tm_isdst
| : bool | ; | (* | Daylight time savings in effect | *) |
The type representing wallclock time and calendar date.
Return the current time since 00:00:00 GMT, Jan. 1, 1970, in seconds.
Convert a time in seconds, as returned by UnixLabels.time, into a date and a time. Assumes UTC.
Convert a time in seconds, as returned by UnixLabels.time, into a date and a time. Assumes the local time zone.
Convert a date and time, specified by the tm
argument, into
a time in seconds, as returned by UnixLabels.time. Also return a normalized
copy of the given tm
record, with the tm_wday
, tm_yday
,
and tm_isdst
fields recomputed from the other fields.
The tm
argument is interpreted in the local time zone.
Convert a date and time, specified by the tm
argument, into a formatted string.
See 'man strftime' for format options.
Schedule a SIGALRM
signal after the given number of seconds.
Stop execution for the given number of seconds.
nanosleep f
delays execution of the program for at least f
seconds. The function
can return earlier if a signal has been delivered, in which case the number of
seconds left is returned. Any other failure raises an exception.
Set the last access time (second arg) and last modification time (third arg) for a file. Times are expressed in seconds from 00:00:00 GMT, Jan. 1, 1970.
#
| ITIMER_REAL
| (* | decrements in real time, and sends the signal SIGALRM when expired. | *) |
#
| ITIMER_VIRTUAL
| (* | decrements in process virtual time, and sends SIGVTALRM when expired. | *) |
#
| ITIMER_PROF
|
The three kinds of interval timers.
#
it_interval
| : float | ; | (* | Period | *) |
#
it_value
| : float | ; | (* | Current value of the timer | *) |
The type describing the status of an interval timer
Return the current status of the given interval timer.
setitimer t s
sets the interval timer t
and returns
its previous status. The s
argument is interpreted as follows:
s.it_value
, if nonzero, is the time to the next timer expiration;
s.it_interval
, if nonzero, specifies a value to
be used in reloading it_value when the timer expires.
Setting s.it_value
to zero disable the timer.
Setting s.it_interval
to zero causes the timer to be disabled
after its next expiration.
It's highly recommended to read the straight unix docs on these functions for more color. You can get that info from man pages or http://www.opengroup.org/onlinepubs/000095399/functions/setuid.html
Return the user id of the user executing the process.
Return the effective user id under which the process runs.
Sets the real user id and effective user id for the process. Only use this when superuser. To setuid as an ordinary user, see Core_extended.Unix.seteuid.
Return the group id of the user executing the process.
Return the effective group id under which the process runs.
Set the real group id and effective group id for the process.
Structure of entries in the groups
database.
Return the login name of the user executing the process.
Conversion from the printable representation of an Internet address to its internal
representation. The argument string consists of 4 numbers separated by periods
(XXX.YYY.ZZZ.TTT
) for IPv4 addresses, and up to 8 numbers separated by colons for
IPv6 addresses. Raise Failure
when given a string that does not match these
formats.
Return the printable representation of the given Internet address. See of_string
for a description of the printable representation.
A special address, for use only with bind
, representing all the Internet addresses
that the host machine possesses.
Some things (like the kernel) report addresses as hex or decimal strings. Provide conversion functions.
A representation of CIDR netmasks (e.g. "192.168.0.0/24") and functions to match if a given address is inside the range or not. Only IPv4 addresses are supported.
IPv4 multicast address can be represented by the CIDR prefix 224.0.0.0/4, (i.e. addreses from 224.0.0.0 to 239.255.255.255, inclusive)
#
| PF_UNIX
| (* | Unix domain | *) |
#
| PF_INET
| (* | Internet domain | *) |
#
| PF_INET6
|
The type of socket domains.
#
| ADDR_UNIX of string
| |||
The type of socket addresses. ADDR_UNIX name
is a socket
address in the Unix domain; name
is a file name in the file
system. ADDR_INET(addr,port)
is a socket address in the Internet
domain; addr
is the Internet address of the machine, and
port
is the port number.
Return the socket domain adequate for the given socket address.
Create a new socket in the given domain, and with the given kind. The third argument is the protocol type; 0 selects the default protocol for that kind of sockets.
Create a pair of unnamed sockets, connected together.
Accept connections on the given socket. The returned descriptor is a socket connected to the client; the returned address is the address of the connecting client.
Set up a socket for receiving connection requests. The integer argument is the maximal number of pending requests.
#
| SHUTDOWN_RECEIVE
| (* | Close for receiving | *) |
#
| SHUTDOWN_SEND
| (* | Close for sending | *) |
#
| SHUTDOWN_ALL
|
The type of commands for shutdown
.
Shutdown a socket connection. SHUTDOWN_SEND
as second argument
causes reads on the other end of the connection to return
an end-of-file condition.
SHUTDOWN_RECEIVE
causes writes on the other end of the connection
to return a closed pipe condition (SIGPIPE
signal).
Return the address of the host connected to the given socket.
#
| MSG_OOB
| |||
#
| MSG_DONTROUTE
| |||
#
| MSG_PEEK
|
The flags for UnixLabels.recv, UnixLabels.recvfrom, UnixLabels.send and UnixLabels.sendto.
Receive data from a connected socket.
Receive data from an unconnected socket.
Send data over a connected socket.
Send data over an unconnected socket.
#
| SO_DEBUG
| (* | Record debugging information | *) |
#
| SO_BROADCAST
| (* | Permit sending of broadcast messages | *) |
#
| SO_REUSEADDR
| (* | Allow reuse of local addresses for bind | *) |
#
| SO_KEEPALIVE
| (* | Keep connection active | *) |
#
| SO_DONTROUTE
| (* | Bypass the standard routing algorithms | *) |
#
| SO_OOBINLINE
| (* | Leave out-of-band data in line | *) |
#
| SO_ACCEPTCONN
| |||
#
| TCP_NODELAY
| (* | Control the Nagle algorithm for TCP sockets | *) |
#
| IPV6_ONLY
|
The socket options that can be consulted with UnixLabels.getsockopt
and modified with UnixLabels.setsockopt. These options have a boolean
(true
/false
) value.
#
| SO_SNDBUF
| (* | Size of send buffer | *) |
#
| SO_RCVBUF
| (* | Size of received buffer | *) |
#
| SO_ERROR
| (* | Report the error status and clear it | *) |
#
| SO_TYPE
| (* | Report the socket type | *) |
#
| SO_RCVLOWAT
| (* | Minimum number of bytes to process for input operations | *) |
#
| SO_SNDLOWAT
|
The socket options that can be consulted with UnixLabels.getsockopt_int and modified with UnixLabels.setsockopt_int. These options have an integer value.
#
| SO_LINGER
| (* | Whether to linger on closed connections with sexp that have data present, and for how long (in seconds) | *) |
The socket options that can be consulted with UnixLabels.getsockopt_optint
and modified with UnixLabels.setsockopt_optint. These options have a
value of type int option
, with None
meaning ``disabled''.
#
| SO_RCVTIMEO
| (* | Timeout for input operations | *) |
#
| SO_SNDTIMEO
|
The socket options that can be consulted with UnixLabels.getsockopt_float and modified with UnixLabels.setsockopt_float. These options have a floating-point value representing a time in seconds. The value 0 means infinite timeout.
Return the current status of a boolean-valued option in the given socket.
Set or clear a boolean-valued option in the given socket.
Same as UnixLabels.getsockopt for an integer-valued socket option.
Same as UnixLabels.setsockopt for an integer-valued socket option.
Same as UnixLabels.getsockopt for a socket option whose value is an int option
.
Same as UnixLabels.setsockopt for a socket option whose value is an int option
.
Same as UnixLabels.getsockopt for a socket option whose value is a floating-point number.
Same as UnixLabels.setsockopt for a socket option whose value is a floating-point number.
Connect to a server at the given address. Return a pair of buffered channels connected to the server. Remember to call Pervasives.flush on the output channel at the right times to ensure correct synchronization.
``Shut down'' a connection established with UnixLabels.open_connection; that is, transmit an end-of-file condition to the server reading on the other side of the connection.
Establish a server on the given address. The function given as first argument is called for each connection with two buffered channels connected to the client. A new process is created for each connection. The function UnixLabels.establish_server never returns normally.
Return the name of the local host.
#
ai_family
| : socket_domain | ; | (* | Socket domain | *) |
#
ai_socktype
| : socket_type | ; | (* | Socket type | *) |
#
ai_protocol
| : int | ; | (* | Socket protocol number | *) |
#
ai_addr
| : sockaddr | ; | (* | Address | *) |
#
ai_canonname
| : string | ; |
Address information returned by Unix.getaddrinfo.
(* | Impose the given socket domain | *) | |
(* | Impose the given socket type | *) | |
#
| AI_PROTOCOL of int
| (* | Impose the given protocol | *) |
#
| AI_NUMERICHOST
| (* | Do not call name resolver, expect numeric IP address | *) |
#
| AI_CANONNAME
| (* | Fill the ai_canonname field
of the result | *) |
#
| AI_PASSIVE
|
Options to Unix.getaddrinfo.
getaddrinfo host service opts
returns a list of Unix.addr_info
records describing socket parameters and addresses suitable for
communicating with the given host and service. The empty list is
returned if the host or service names are unknown, or the constraints
expressed in opts
cannot be satisfied.
host
is either a host name or the string representation of an IP
address. host
can be given as the empty string; in this case,
the ``any'' address or the ``loopback'' address are used,
depending whether opts
contains AI_PASSIVE
.
service
is either a service name or the string representation of
a port number. service
can be given as the empty string;
in this case, the port field of the returned addresses is set to 0.
opts
is a possibly empty list of options that allows the caller
to force a particular socket domain (e.g. IPv6 only, or IPv4 only)
or a particular socket type (e.g. TCP only or UDP only).
#
ni_hostname
| : string | ; | (* | Name or IP address of host | *) |
#
ni_service
| : string | ; |
Host and service information returned by Unix.getnameinfo.
getnameinfo addr opts
returns the host name and service name
corresponding to the socket address addr
. opts
is a possibly
empty list of options that governs how these names are obtained.
Raise Not_found
if an error occurs.
The following functions implement the POSIX standard terminal
interface. They provide control over asynchronous communication ports
and pseudo-terminals. Refer to the termios
man page for a complete
description.
#
mutable c_ignbrk
| : bool | ; | (* | Ignore the break condition. | *) |
#
mutable c_brkint
| : bool | ; | (* | Signal interrupt on break condition. | *) |
#
mutable c_ignpar
| : bool | ; | (* | Ignore characters with parity errors. | *) |
#
mutable c_parmrk
| : bool | ; | (* | Mark parity errors. | *) |
#
mutable c_inpck
| : bool | ; | (* | Enable parity check on input. | *) |
#
mutable c_istrip
| : bool | ; | (* | Strip 8th bit on input characters. | *) |
#
mutable c_inlcr
| : bool | ; | (* | Map NL to CR on input. | *) |
#
mutable c_igncr
| : bool | ; | (* | Ignore CR on input. | *) |
#
mutable c_icrnl
| : bool | ; | (* | Map CR to NL on input. | *) |
#
mutable c_ixon
| : bool | ; | (* | Recognize XON/XOFF characters on input. | *) |
#
mutable c_ixoff
| : bool | ; | (* | Emit XON/XOFF chars to control input flow. | *) |
#
mutable c_opost
| : bool | ; | (* | Enable output processing. | *) |
#
mutable c_obaud
| : int | ; | (* | Output baud rate (0 means close connection). | *) |
#
mutable c_ibaud
| : int | ; | (* | Input baud rate. | *) |
#
mutable c_csize
| : int | ; | (* | Number of bits per character (5-8). | *) |
#
mutable c_cstopb
| : int | ; | (* | Number of stop bits (1-2). | *) |
#
mutable c_cread
| : bool | ; | (* | Reception is enabled. | *) |
#
mutable c_parenb
| : bool | ; | (* | Enable parity generation and detection. | *) |
#
mutable c_parodd
| : bool | ; | (* | Specify odd parity instead of even. | *) |
#
mutable c_hupcl
| : bool | ; | (* | Hang up on last close. | *) |
#
mutable c_clocal
| : bool | ; | (* | Ignore modem status lines. | *) |
#
mutable c_isig
| : bool | ; | (* | Generate signal on INTR, QUIT, SUSP. | *) |
#
mutable c_icanon
| : bool | ; | (* | Enable canonical processing (line buffering and editing) | *) |
#
mutable c_noflsh
| : bool | ; | (* | Disable flush after INTR, QUIT, SUSP. | *) |
#
mutable c_echo
| : bool | ; | (* | Echo input characters. | *) |
#
mutable c_echoe
| : bool | ; | (* | Echo ERASE (to erase previous character). | *) |
#
mutable c_echok
| : bool | ; | (* | Echo KILL (to erase the current line). | *) |
#
mutable c_echonl
| : bool | ; | (* | Echo NL even if c_echo is not set. | *) |
#
mutable c_vintr
| : char | ; | (* | Interrupt character (usually ctrl-C). | *) |
#
mutable c_vquit
| : char | ; | (* | Quit character (usually ctrl-\). | *) |
#
mutable c_verase
| : char | ; | (* | Erase character (usually DEL or ctrl-H). | *) |
#
mutable c_vkill
| : char | ; | (* | Kill line character (usually ctrl-U). | *) |
#
mutable c_veof
| : char | ; | (* | End-of-file character (usually ctrl-D). | *) |
#
mutable c_veol
| : char | ; | (* | Alternate end-of-line char. (usually none). | *) |
#
mutable c_vmin
| : int | ; | (* | Minimum number of characters to read before the read request is satisfied. | *) |
#
mutable c_vtime
| : int | ; | (* | Maximum read wait (in 0.1s units). | *) |
#
mutable c_vstart
| : char | ; | (* | Start character (usually ctrl-Q). | *) |
#
mutable c_vstop
| : char | ; | (* | Stop character (usually ctrl-S). | *) |
Return the status of the terminal referred to by the given file descriptor.
Set the status of the terminal referred to by the given
file descriptor. The second argument indicates when the
status change takes place: immediately (TCSANOW
),
when all pending output has been transmitted (TCSADRAIN
),
or after flushing all input that has been received but not
read (TCSAFLUSH
). TCSADRAIN
is recommended when changing
the output parameters; TCSAFLUSH
, when changing the input
parameters.
Send a break condition on the given file descriptor. The second argument is the duration of the break, in 0.1s units; 0 means standard duration (0.25s).
Waits until all output written on the given file descriptor has been transmitted.
Discard data written on the given file descriptor but not yet
transmitted, or data received but not yet read, depending on the
second argument: TCIFLUSH
flushes data received but not read,
TCOFLUSH
flushes data written but not transmitted, and
TCIOFLUSH
flushes both.
Suspend or restart reception or transmission of data on
the given file descriptor, depending on the second argument:
TCOOFF
suspends output, TCOON
restarts output,
TCIOFF
transmits a STOP character to suspend input,
and TCION
transmits a START character to restart input.
Put the calling process in a new session and detach it from its controlling terminal.
Set a timeout for a socket associated with an in_channel
Set a timeout for a socket associated with an out_channel
exit_immediately exit_code
immediately calls the exit
system call with the given
exit code without performing any other actions (unlike Pervasives.exit). Does not
return.
mknod ?file_kind ?perm ?major ?minor path
creates a filesystem
entry. Note that only FIFO-entries are guaranteed to be supported
across all platforms as required by the POSIX-standard. On Linux
directories and symbolic links cannot be created with this function.
Use Unix.mkdir and Unix.symlink instead there respectively.
Invalid_argument
if an unsupported file kind is used.
Unix_error
if the system call fails.
S_REG
(= regular file)
0o600
(= read/write for user only)
0
0
I/O-vectors for scatter/gather-operations
#
buf
| : 'buf | ; | (* | Buffer holding the I/O-vector | *) |
#
pos
| : int | ; | (* | Position of I/O-vector in buffer | *) |
#
len
| : int | ; | (* | Length of I/O-vector in buffer | *) |
Representation of I/O-vectors. NOTE: DO NOT CHANGE THE MEMORY LAYOUT OF THIS TYPE!!! All C-functions in our bindings that handle I/O-vectors depend on it.
Kind of I/O-vector buffers
of_string ?pos ?len str
pos
and length len
in string str
.
Invalid_argument
if designated substring out of bounds.
String.length str - pos
Extract a file descriptor from a directory handle.
Synchronize all filesystem buffers with disk.
Synchronize the kernel buffers of a given file descriptor with disk, but do not necessarily write file attributes.
readdir_ino dh
return the next entry in a directory (((filename,
inode)
).
End_of_file
when the end of the directory has been
reached.
read_assume_fd_is_nonblocking fd ?pos ?len buf
calls the system call
read
ASSUMING THAT IT IS NOT GOING TO BLOCK. Reads at most len
bytes into buffer buf
starting at position pos
.
Invalid_argument
if buffer range out of bounds.
Unix_error
on Unix-errors.
String.length buf - pos
write_assume_fd_is_nonblocking fd ?pos ?len buf
calls the system call
write
ASSUMING THAT IT IS NOT GOING TO BLOCK. Writes at most len
bytes from buffer buf
starting at position pos
.
Invalid_argument
if buffer range out of bounds.
Unix_error
on Unix-errors.
String.length buf - pos
writev_assume_fd_is_nonblocking fd ?count iovecs
calls the system call
writev
ASSUMING THAT IT IS NOT GOING TO BLOCK using count
I/O-vectors iovecs
.
Invalid_argument
if the designated ranges are invalid.
Unix_error
on Unix-errors.
writev fd ?count iovecs
like writev_assume_fd_is_nonblocking, but does
not require the descriptor to not block. If you feel you have to
use this function, you should probably have chosen I/O-vectors that
build on bigstrings, because this function has to internally blit
the I/O-vectors (ordinary OCaml strings) to intermediate buffers on
the C-heap.
Invalid_argument
if the designated ranges are invalid.
Unix_error
on Unix-errors.
-- For details, "man getrusage"
mkstemp prefix
creates and opens a unique temporary file with prefix
,
automatically appending a suffix of six random characters to make the name unique.
Unlike C's mkstemp
, prefix
should not include six X's at the end.
Unix_error
on errors.
mkdtemp prefix
creates a temporary directory with prefix
,
automatically appending a suffix of six random characters to make
the name unique.
Unix_error
on errors.
k
getgrouplist user group
returns the list of groups to which user
belongs.
See 'man getgrouplist'.
Return the list of groups to which the user executing the process belongs.
mcast_join ?ifname sock addr
join a multicast group at addr
with socket sock
,
from source at source
if specified, optionally using network interface ifname
.
mcast_leave ?ifname sock addr
leaves a multicast group at addr
with socket sock
,
optionally using network interface ifname
.
get_mcast_ttl sock
reads the time-to-live value of outgoing multicast packets for
socket sock
.
set_mcast_ttl sock ttl
sets the time-to-live value of outgoing multicast packets for
socket sock
to ttl
.
get_mcast_loop sock
reads the boolean argument that determines whether sent
multicast packets are looped back to local sockets.
set_mcast_loop sock loop
sets the boolean argument that determines whether sent
multicast packets are looped back to local sockets.
set_mcast_ifname sock "eth0"
sets outgoing multicast traffic on IPv4 UDP socket
sock
to go out through interface eth0
.
This uses setsockopt
with IP_MULTICAST_IF
and applies to multicast traffic. For
non-multicast applications, see Linux_ext.bind_to_interface.