This file is a modified version of unixLabels.mli from the OCaml distribution.
type error = Unix.error = val sexp_of_error : Unix.error ‑> Core__.Import.Sexp.tval error_of_sexp : Core__.Import.Sexp.t ‑> Unix.errormodule Error : sig ... endexception Unix_error of Error.t * string * stringRaised 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.
module Syscall_result : module type of Core__.Syscall_result with type 'a Syscall_result.t = 'a Core__.Syscall_result.texternal unix_error : int ‑> string ‑> string ‑> _ = "unix_error_stub" val handle_unix_error : (unit ‑> 'a) ‑> 'ahandle_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.
val retry_until_no_eintr : (unit ‑> 'a) ‑> 'aretry_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.
val environment : unit ‑> string arrayReturn the process environment, as an array of strings with the format ``variable=value''.
val putenv : key:string ‑> data:string ‑> unitUnix.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.
val unsetenv : string ‑> unitunsetenv name deletes the variable name from the environment.
EINVAL name contained an ’=’ or an '\000' character.
module Exit_or_signal : sig ... endmodule Exit_or_signal_or_stop : sig ... endtype env = [ | `Replace of (string * string) list |
| `Extend of (string * string) list |
| `Replace_raw of string list |
]env is used to control the environment of a child process, and can take three forms.
`Replace_raw replaces the entire environment with strings in the Unix style, like
"VARIABLE_NAME=value". `Replace has the same effect as `Replace_raw, but using
bindings represented as "VARIABLE_NAME", "value". `Extend adds entries to the
existing environment rather than replacing the whole environment.
If env contains multiple bindings for the same variable, the last takes precedence.
In the case of `Extend, bindings in env take precedence over the existing
environment.
include sig ... endval env_of_sexp : Base.Sexp.t ‑> envval __env_of_sexp__ : Base.Sexp.t ‑> envval sexp_of_env : env ‑> Base.Sexp.tval exec : prog:string ‑> argv:string list ‑> ?use_path:bool ‑> ?env:env ‑> unit ‑> Core__.Import.never_returnsexec ~prog ~argv ?search_path ?env execs prog with argv. 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 determines the environment
when prog is executed.
The first element in argv should be the program itself; the correct way to call
exec is:
exec ~prog ~argv:[ prog; arg1; arg2; ...] ()val fork_exec : prog:string ‑> argv:string list ‑> ?use_path:bool ‑> ?env:env ‑> unit ‑> Core__.Import.Pid.tfork_exec ~prog ~argv ?use_path ?env () forks and execs prog with argv in the
child process, returning the child PID to the parent. As in exec, the first element
in argv should be the program itself.
val fork : unit ‑> [ `In_the_child | `In_the_parent of Core__.Import.Pid.t ]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.
include sig ... endval wait_on_of_sexp : Base.Sexp.t ‑> wait_onval __wait_on_of_sexp__ : Base.Sexp.t ‑> wait_onval sexp_of_wait_on : wait_on ‑> Base.Sexp.tval wait : ?restart:bool ‑> wait_on ‑> Core__.Import.Pid.t * Exit_or_signal.tval wait_nohang : wait_on ‑> (Core__.Import.Pid.t * Exit_or_signal.t) optionval wait_untraced : ?restart:bool ‑> wait_on ‑> Core__.Import.Pid.t * Exit_or_signal_or_stop.tval wait_nohang_untraced : wait_on ‑> (Core__.Import.Pid.t * Exit_or_signal_or_stop.t) optionval waitpid : Core__.Import.Pid.t ‑> Exit_or_signal.twaitpid 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.
val waitpid_exn : Core__.Import.Pid.t ‑> unitval system : string ‑> Exit_or_signal.tExecute 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.
val getppid_exn : unit ‑> Core__.Import.Pid.tReturn the pid of the parent process, if you're really sure you're never going to be the init process.
module Thread_id : sig ... endval gettid : (unit ‑> Thread_id.t) Core__.Import.Or_error.tGet the numeric ID of the current thread, e.g. for identifying it in top(1).
val nice : int ‑> intChange 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.
type open_flag = Unix.open_flag = | 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 *) |
| O_KEEPEXEC |
val open_flag_of_sexp : Core__.Import.Sexp.t ‑> open_flagWe can't use with sexp because pa_sexp inserts two copies of the val specs, which
leads to a spurious "unused" warning.
val sexp_of_open_flag : open_flag ‑> Core__.Import.Sexp.tinclude sig ... endval file_perm_of_sexp : Base.Sexp.t ‑> file_permval sexp_of_file_perm : file_perm ‑> Base.Sexp.tval openfile : ?perm:file_perm ‑> mode:open_flag list ‑> string ‑> File_descr.tOpen 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.
module Open_flags : sig ... endval fcntl_getfl : File_descr.t ‑> Open_flags.tfcntl_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".
val fcntl_setfl : File_descr.t ‑> Open_flags.t ‑> unitfcntl_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.
val with_file : ?perm:file_perm ‑> string ‑> mode:open_flag list ‑> f:(File_descr.t ‑> 'a) ‑> 'awith_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).
val read : ?restart:bool ‑> ?pos:int ‑> ?len:int ‑> File_descr.t ‑> buf:Core__.Import.Bytes.t ‑> intread 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.
val write : ?pos:int ‑> ?len:int ‑> File_descr.t ‑> buf:Core__.Import.Bytes.t ‑> intwrite fd buff ofs len writes len characters to descriptor
fd, taking them from bytes buff, starting at position ofs
in bytes 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.
val write_substring : ?pos:int ‑> ?len:int ‑> File_descr.t ‑> buf:string ‑> intSame as write but with a string buffer.
val single_write : ?restart:bool ‑> ?pos:int ‑> ?len:int ‑> File_descr.t ‑> buf:Core__.Import.Bytes.t ‑> intSame as write but ensures that all errors are reported and
that no character has ever been written when an error is reported.
val single_write_substring : ?restart:bool ‑> ?pos:int ‑> ?len:int ‑> File_descr.t ‑> buf:string ‑> intSame as single_write but with a string buffer.
val in_channel_of_descr : File_descr.t ‑> Core__.Import.In_channel.tCreate 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.
val out_channel_of_descr : File_descr.t ‑> Core__.Import.Out_channel.tCreate 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.
val descr_of_in_channel : Core__.Import.In_channel.t ‑> File_descr.tReturn the descriptor corresponding to an input channel.
val descr_of_out_channel : Core__.Import.Out_channel.t ‑> File_descr.tReturn the descriptor corresponding to an output channel.
type seek_command = Unix.seek_command = POSITIONING modes for UnixLabels.lseek.
include sig ... endval seek_command_of_sexp : Base.Sexp.t ‑> seek_commandval sexp_of_seek_command : seek_command ‑> Base.Sexp.tval lseek : File_descr.t ‑> int64 ‑> mode:seek_command ‑> int64Set the current position for a file descriptor
val ftruncate : File_descr.t ‑> len:int64 ‑> unitTruncates the file corresponding to the given descriptor to the given size.
include sig ... endval file_kind_of_sexp : Base.Sexp.t ‑> file_kindval sexp_of_file_kind : file_kind ‑> Base.Sexp.ttype stats = Unix.LargeFile.stats = {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. The times are float
number of seconds since the epoch; we don't use Time.t because Time depends on
Unix, so the fix isn't so trivial. Same for Native_file.stats below.
val lstat : string ‑> statsSame as UnixLabels.stat, but in case the file is a symbolic link, return the information for the link itself.
val fstat : File_descr.t ‑> statsReturn the information for the file associated with the given descriptor.
module Native_file : sig ... endThis sub-module provides the normal OCaml Unix functions that deal with file size using native ints. These are here because, in general, you should be using 64bit file operations so that large files aren't an issue. If you have a real need to use potentially 31bit file operations (and you should be dubious of such a need) you can open this module
type lock_command = Unix.lock_command = Commands for lockf.
include sig ... endval lock_command_of_sexp : Base.Sexp.t ‑> lock_commandval sexp_of_lock_command : lock_command ‑> Base.Sexp.tval lockf : File_descr.t ‑> mode:lock_command ‑> len:Core__.Import.Int64.t ‑> unitlockf 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.
module Flock_command : sig ... endval flock : File_descr.t ‑> Flock_command.t ‑> boolflock fd cmd places or releases a lock on the fd as per the flock C call of the same
name.
val isatty : File_descr.t ‑> boolReturn true if the given file descriptor refers to a terminal or
console window, false otherwise.
val rename : src:string ‑> dst:string ‑> unitrename old new changes the name of a file from old to new.
val link : ?force:bool ‑> target:string ‑> link_name:string ‑> unit ‑> unitlink ?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.
val chown : string ‑> uid:int ‑> gid:int ‑> unitChange the owner uid and owner gid of the named file.
val fchown : File_descr.t ‑> uid:int ‑> gid:int ‑> unitChange the owner uid and owner gid of an opened file.
val access : string ‑> [ `Read | `Write | `Exec | `Exists ] list ‑> (unit, exn) Core__.Import.Result.tCheck that the process has the given permissions over the named file.
val dup : File_descr.t ‑> File_descr.tReturn a new file descriptor referencing the same file as the given descriptor.
val dup2 : src:File_descr.t ‑> dst:File_descr.t ‑> unitdup2 ~src ~dst duplicates src to dst, closing dst if already
opened.
val set_nonblock : File_descr.t ‑> unitSet 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.
val clear_nonblock : File_descr.t ‑> unitClear the ``non-blocking'' flag on the given descriptor. See UnixLabels.set_nonblock.
val set_close_on_exec : File_descr.t ‑> unitSet 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.
val clear_close_on_exec : File_descr.t ‑> unitClear the ``close-on-exec'' flag on the given descriptor. See UnixLabels.set_close_on_exec.
val mkdir : ?perm:file_perm ‑> string ‑> unitCreate a directory. The permissions of the created directory are (perm & ~umask & 0777). The default perm is 0777.
val mkdir_p : ?perm:file_perm ‑> string ‑> unitCreate a directory recursively. The permissions of the created directory are
those granted by mkdir ~perm.
val readdir_opt : dir_handle ‑> string optionReturn the next entry in a directory. Returns None when the end of the directory
has been reached.
val readdir : dir_handle ‑> stringSame as readdir_opt except that it signals the end of the directory by raising
End_of_file.
val pipe : unit ‑> File_descr.t * File_descr.tCreate 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.
module Process_info : sig ... endLow-level process
val create_process : prog:string ‑> args:string list ‑> Process_info.tcreate_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.
val create_process_env : ?working_dir:string ‑> prog:string ‑> args:string list ‑> env:env ‑> unit ‑> Process_info.tcreate_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.
val open_process_in : string ‑> Core__.Import.In_channel.tHigh-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.
val open_process : string ‑> Core__.Import.In_channel.t * Core__.Import.Out_channel.tSee UnixLabels.open_process_in.
module Process_channels : sig ... endSimilar 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.
val open_process_full : string ‑> env:string array ‑> Process_channels.tclose_process_* raises Unix_error if, for example, the file descriptor has already
been closed.
val close_process_in : Core__.Import.In_channel.t ‑> Exit_or_signal.tClose channels opened by UnixLabels.open_process_in, wait for the associated command to terminate, and return its termination status.
val close_process_out : Core__.Import.Out_channel.t ‑> Exit_or_signal.tClose channels opened by UnixLabels.open_process_out, wait for the associated command to terminate, and return its termination status.
val close_process : (Core__.Import.In_channel.t * Core__.Import.Out_channel.t) ‑> Exit_or_signal.tClose channels opened by UnixLabels.open_process, wait for the associated command to terminate, and return its termination status.
val close_process_full : Process_channels.t ‑> Exit_or_signal.tClose channels opened by UnixLabels.open_process_full, wait for the associated command to terminate, and return its termination status.
val symlink : src:string ‑> dst:string ‑> unitsymlink source dest creates the file dest as a symbolic link
to the file source.
On Windows, this has the semantics using stat as described at:
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html
module Select_fds : sig ... endinclude sig ... endval sexp_of_select_timeout : select_timeout ‑> Base.Sexp.tval select : ?restart:bool ‑> read:File_descr.t list ‑> write:File_descr.t list ‑> except:File_descr.t list ‑> timeout:select_timeout ‑> unit ‑> Select_fds.tWait until some input/output operations become possible on some channels. The three
list arguments are a set of descriptors to check for reading, for writing, or for
exceptional conditions. ~timeout is the maximal timeout. The result is composed of
three sets of descriptors: those ready for reading, ready for writing, and over which
an exceptional condition is pending.
Setting restart to true means that we want select to restart automatically on EINTR
(instead of propagating the exception)...
type process_times = Unix.process_times = {}The execution times (CPU times) of a process.
include sig ... endval process_times_of_sexp : Base.Sexp.t ‑> process_timesval sexp_of_process_times : process_times ‑> Base.Sexp.tmodule Clock : sig ... endtype tm = Unix.tm = {}The type representing wallclock time and calendar date.
val gmtime : float ‑> tmConvert a time in seconds, as returned by UnixLabels.time, into a date and a time. Assumes UTC.
val localtime : float ‑> tmConvert 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.
val strftime : tm ‑> string ‑> stringConvert a date and time, specified by the tm argument, into a formatted string.
See 'man strftime' for format options.
val strptime : fmt:string ‑> string ‑> Unix.tmGiven a format string, convert a corresponding string to a date and time See 'man strptime' for format options.
val nanosleep : float ‑> floatnanosleep 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.
val utimes : string ‑> access:float ‑> modif:float ‑> unitSet 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.
type interval_timer = Unix.interval_timer = The three kinds of interval timers.
include sig ... endval interval_timer_of_sexp : Base.Sexp.t ‑> interval_timerval sexp_of_interval_timer : interval_timer ‑> Base.Sexp.ttype interval_timer_status = Unix.interval_timer_status = {it_interval : float; | (** Period *) |
it_value : float; | (** Current value of the timer *) |
}The type describing the status of an interval timer
include sig ... endval interval_timer_status_of_sexp : Base.Sexp.t ‑> interval_timer_statusval sexp_of_interval_timer_status : interval_timer_status ‑> Base.Sexp.tval getitimer : interval_timer ‑> interval_timer_statusReturn the current status of the given interval timer.
val setitimer : interval_timer ‑> interval_timer_status ‑> interval_timer_statussetitimer 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
val setuid : int ‑> unitSets 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.
module Protocol_family : sig ... endmodule Inet_addr : sig ... endmodule Cidr : sig ... endA 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. Values
are always normalized so the base address is the lowest IP address in the range, so
for example to_string (of_string "192.168.1.101/24") = "192.168.1.0/24".
type socket_domain = Unix.socket_domain = | PF_UNIX | (** Unix domain *) |
| PF_INET | (** Internet domain *) |
| PF_INET6 | (** Internet domain (IPv6) *) |
The type of socket domains.
include sig ... endval socket_domain_of_sexp : Base.Sexp.t ‑> socket_domainval sexp_of_socket_domain : socket_domain ‑> Base.Sexp.tval bin_socket_domain : socket_domain Bin_prot.Type_class.tval bin_read_socket_domain : socket_domain Bin_prot.Read.readerval __bin_read_socket_domain__ : (int ‑> socket_domain) Bin_prot.Read.readerval bin_reader_socket_domain : socket_domain Bin_prot.Type_class.readerval bin_size_socket_domain : socket_domain Bin_prot.Size.sizerval bin_write_socket_domain : socket_domain Bin_prot.Write.writerval bin_writer_socket_domain : socket_domain Bin_prot.Type_class.writerval bin_shape_socket_domain : Bin_prot.Shape.ttype socket_type = Unix.socket_type = | SOCK_STREAM | (** Stream socket *) |
| SOCK_DGRAM | (** Datagram socket *) |
| SOCK_RAW | (** Raw socket *) |
| SOCK_SEQPACKET | (** Sequenced packets socket *) |
The type of socket kinds, specifying the semantics of communications.
include sig ... endval socket_type_of_sexp : Base.Sexp.t ‑> socket_typeval sexp_of_socket_type : socket_type ‑> Base.Sexp.tval bin_socket_type : socket_type Bin_prot.Type_class.tval bin_read_socket_type : socket_type Bin_prot.Read.readerval __bin_read_socket_type__ : (int ‑> socket_type) Bin_prot.Read.readerval bin_reader_socket_type : socket_type Bin_prot.Type_class.readerval bin_size_socket_type : socket_type Bin_prot.Size.sizerval bin_write_socket_type : socket_type Bin_prot.Write.writerval bin_writer_socket_type : socket_type Bin_prot.Type_class.writerval bin_shape_socket_type : Bin_prot.Shape.tThe 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.
include sig ... endval bin_sockaddr : sockaddr Bin_prot.Type_class.tval bin_read_sockaddr : sockaddr Bin_prot.Read.readerval __bin_read_sockaddr__ : (int ‑> sockaddr) Bin_prot.Read.readerval bin_reader_sockaddr : sockaddr Bin_prot.Type_class.readerval bin_size_sockaddr : sockaddr Bin_prot.Size.sizerval bin_write_sockaddr : sockaddr Bin_prot.Write.writerval bin_writer_sockaddr : sockaddr Bin_prot.Type_class.writerval bin_shape_sockaddr : Bin_prot.Shape.tval sexp_of_sockaddr : sockaddr ‑> Base.Sexp.tval sockaddr_of_sexp : Core__.Import.Sexp.t ‑> sockaddrsockaddr_blocking_sexp is like sockaddr, with of_sexp that performs DNS lookup
to resolve Inet_addr.t.
include sig ... endval bin_sockaddr_blocking_sexp : sockaddr_blocking_sexp Bin_prot.Type_class.tval bin_read_sockaddr_blocking_sexp : sockaddr_blocking_sexp Bin_prot.Read.readerval __bin_read_sockaddr_blocking_sexp__ : (int ‑> sockaddr_blocking_sexp) Bin_prot.Read.readerval bin_reader_sockaddr_blocking_sexp : sockaddr_blocking_sexp Bin_prot.Type_class.readerval bin_size_sockaddr_blocking_sexp : sockaddr_blocking_sexp Bin_prot.Size.sizerval bin_write_sockaddr_blocking_sexp : sockaddr_blocking_sexp Bin_prot.Write.writerval bin_writer_sockaddr_blocking_sexp : sockaddr_blocking_sexp Bin_prot.Type_class.writerval bin_shape_sockaddr_blocking_sexp : Bin_prot.Shape.tval sockaddr_blocking_sexp_of_sexp : Base.Sexp.t ‑> sockaddr_blocking_sexpval sexp_of_sockaddr_blocking_sexp : sockaddr_blocking_sexp ‑> Base.Sexp.tval domain_of_sockaddr : sockaddr ‑> socket_domainReturn the socket domain adequate for the given socket address.
val socket : domain:socket_domain ‑> kind:socket_type ‑> protocol:int ‑> File_descr.tCreate 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.
val socketpair : domain:socket_domain ‑> kind:socket_type ‑> protocol:int ‑> File_descr.t * File_descr.tCreate a pair of unnamed sockets, connected together.
val accept : File_descr.t ‑> File_descr.t * sockaddrAccept 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.
val listen : File_descr.t ‑> backlog:int ‑> unitSet up a socket for receiving connection requests. The integer argument is the number
of pending requests that will be established and queued for accept. Depending on
operating system, version, and configuration, subsequent connections may be refused
actively (as with RST), ignored, or effectively established and queued anyway.
Because handling of excess connections varies, it is most robust for applications to
accept and close excess connections if they can. To be sure the client receives an
RST rather than an orderly shutdown, you can setsockopt_optint file_descr SO_LINGER
(Some 0) before closing.
In Linux, for example, the system configuration parameters tcp_max_syn_backlog,
tcp_abort_on_overflow, and syncookies can all affect connection queuing
behavior.
type shutdown_command = Unix.shutdown_command = | SHUTDOWN_RECEIVE | (** Close for receiving *) |
| SHUTDOWN_SEND | (** Close for sending *) |
| SHUTDOWN_ALL | (** Close both *) |
The type of commands for shutdown.
include sig ... endval shutdown_command_of_sexp : Base.Sexp.t ‑> shutdown_commandval sexp_of_shutdown_command : shutdown_command ‑> Base.Sexp.tval shutdown : File_descr.t ‑> mode:shutdown_command ‑> unitShutdown 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).
val getpeername : File_descr.t ‑> sockaddrReturn the address of the host connected to the given socket.
include sig ... endval msg_flag_of_sexp : Base.Sexp.t ‑> msg_flagval sexp_of_msg_flag : msg_flag ‑> Base.Sexp.tval recv : File_descr.t ‑> buf:Core__.Import.Bytes.t ‑> pos:int ‑> len:int ‑> mode:msg_flag list ‑> intReceive data from a connected socket.
val recvfrom : File_descr.t ‑> buf:Core__.Import.Bytes.t ‑> pos:int ‑> len:int ‑> mode:msg_flag list ‑> int * sockaddrReceive data from an unconnected socket.
val send : File_descr.t ‑> buf:Core__.Import.Bytes.t ‑> pos:int ‑> len:int ‑> mode:msg_flag list ‑> intSend data over a connected socket.
val send_substring : File_descr.t ‑> buf:string ‑> pos:int ‑> len:int ‑> mode:msg_flag list ‑> intSame as send but with a string buffer.
val sendto : File_descr.t ‑> buf:Core__.Import.Bytes.t ‑> pos:int ‑> len:int ‑> mode:msg_flag list ‑> addr:sockaddr ‑> intSend data over an unconnected socket.
val sendto_substring : File_descr.t ‑> buf:string ‑> pos:int ‑> len:int ‑> mode:msg_flag list ‑> addr:sockaddr ‑> intSame as sendto but with a string buffer.
type socket_bool_option = The socket options that can be consulted with UnixLabels.getsockopt
and modified with UnixLabels.setsockopt. These options have a boolean
(true/false) value.
include sig ... endval socket_bool_option_of_sexp : Base.Sexp.t ‑> socket_bool_optionval sexp_of_socket_bool_option : socket_bool_option ‑> Base.Sexp.ttype socket_int_option = The socket options that can be consulted with UnixLabels.getsockopt_int and modified with UnixLabels.setsockopt_int. These options have an integer value.
include sig ... endval socket_int_option_of_sexp : Base.Sexp.t ‑> socket_int_optionval sexp_of_socket_int_option : socket_int_option ‑> Base.Sexp.ttype socket_optint_option = | 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''.
type socket_float_option = | SO_RCVTIMEO | (** Timeout for input operations *) |
| SO_SNDTIMEO | (** Timeout for output operations *) |
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.
include sig ... endval socket_float_option_of_sexp : Base.Sexp.t ‑> socket_float_optionval sexp_of_socket_float_option : socket_float_option ‑> Base.Sexp.tval getsockopt : File_descr.t ‑> socket_bool_option ‑> boolReturn the current status of a boolean-valued option in the given socket.
val setsockopt : File_descr.t ‑> socket_bool_option ‑> bool ‑> unitSet or clear a boolean-valued option in the given socket.
val getsockopt_int : File_descr.t ‑> socket_int_option ‑> intSame as UnixLabels.getsockopt for an integer-valued socket option.
val setsockopt_int : File_descr.t ‑> socket_int_option ‑> int ‑> unitSame as UnixLabels.setsockopt for an integer-valued socket option.
val getsockopt_optint : File_descr.t ‑> socket_optint_option ‑> int optionSame as UnixLabels.getsockopt for a socket option whose value is an int option.
val setsockopt_optint : File_descr.t ‑> socket_optint_option ‑> int option ‑> unitSame as UnixLabels.setsockopt for a socket option whose value is an int option.
val getsockopt_float : File_descr.t ‑> socket_float_option ‑> floatSame as UnixLabels.getsockopt for a socket option whose value is a floating-point number.
val setsockopt_float : File_descr.t ‑> socket_float_option ‑> float ‑> unitSame as UnixLabels.setsockopt for a socket option whose value is a floating-point number.
val open_connection : sockaddr ‑> Core__.Import.In_channel.t * Core__.Import.Out_channel.tConnect 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.
val shutdown_connection : Core__.Import.In_channel.t ‑> unit``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.
val establish_server : (Core__.Import.In_channel.t ‑> Core__.Import.Out_channel.t ‑> unit) ‑> addr:sockaddr ‑> unitEstablish 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.
module Host : sig ... endmodule Protocol : sig ... endmodule Service : sig ... endtype addr_info = {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; | (** Canonical host name *) |
}Address information returned by Unix.getaddrinfo.
include sig ... endval sexp_of_addr_info : addr_info ‑> Base.Sexp.taddr_info_blocking_sexp is like addr_info, with of_sexp that performs DNS lookup
to resolve Inet_addr.t.
include sig ... endval addr_info_blocking_sexp_of_sexp : Base.Sexp.t ‑> addr_info_blocking_sexpval sexp_of_addr_info_blocking_sexp : addr_info_blocking_sexp ‑> Base.Sexp.ttype getaddrinfo_option = | AI_FAMILY of socket_domain | (** Impose the given socket domain *) |
| AI_SOCKTYPE of socket_type | (** 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_PASSIVE | (** Set address to ``any'' address for use with Unix.bind *) |
Options to Unix.getaddrinfo.
include sig ... endval getaddrinfo_option_of_sexp : Base.Sexp.t ‑> getaddrinfo_optionval sexp_of_getaddrinfo_option : getaddrinfo_option ‑> Base.Sexp.tval getaddrinfo : string ‑> string ‑> getaddrinfo_option list ‑> addr_info listgetaddrinfo 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).
type name_info = {ni_hostname : string; | (** Name or IP address of host *) |
ni_service : string; | (** Name of service or port number *) |
}Host and service information returned by Unix.getnameinfo.
include sig ... endval name_info_of_sexp : Base.Sexp.t ‑> name_infoval sexp_of_name_info : name_info ‑> Base.Sexp.ttype getnameinfo_option = Options to Unix.getnameinfo.
include sig ... endval getnameinfo_option_of_sexp : Base.Sexp.t ‑> getnameinfo_optionval sexp_of_getnameinfo_option : getnameinfo_option ‑> Base.Sexp.tval getnameinfo : sockaddr ‑> getnameinfo_option list ‑> name_infogetnameinfo 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.
module Terminal_io : sig ... endval set_in_channel_timeout : Core__.Import.In_channel.t ‑> float ‑> unitSet a timeout for a socket associated with an In_channel.t
val set_out_channel_timeout : Core__.Import.Out_channel.t ‑> float ‑> unitSet a timeout for a socket associated with an Out_channel.t
val exit_immediately : int ‑> _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.
val mknod : ?file_kind:file_kind ‑> ?perm:int ‑> ?major:int ‑> ?minor:int ‑> string ‑> unitmknod ?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.
S_REG (= regular file)0o600 (= read/write for user only)00external dirfd : dir_handle ‑> File_descr.t = "unix_dirfd" Extract a file descriptor from a directory handle.
external fsync : File_descr.t ‑> unit = "unix_fsync" external fdatasync : File_descr.t ‑> unit = "unix_fdatasync" Synchronize the kernel buffers of a given file descriptor with disk, but do not necessarily write file attributes.
val readdir_ino_opt : dir_handle ‑> (string * nativeint) optionreaddir_ino_opt dh return the next entry in a directory (((filename, inode)). Returns
None when the end of the directory has been reached.
external readdir_ino : dir_handle ‑> string * nativeint = "unix_readdir_ino_stub" Same as readdir_ino_opt except that it signals the end of the directory by raising
End_of_file.
val read_assume_fd_is_nonblocking : File_descr.t ‑> ?pos:int ‑> ?len:int ‑> Core__.Import.Bytes.t ‑> intread_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. returns the
number of bytes actually read.
String.length buf - posval write_assume_fd_is_nonblocking : File_descr.t ‑> ?pos:int ‑> ?len:int ‑> Core__.Import.Bytes.t ‑> intwrite_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. returns the
number of bytes actually written.
String.length buf - posval writev_assume_fd_is_nonblocking : File_descr.t ‑> ?count:int ‑> string IOVec.t array ‑> intwritev_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. returns the number of bytes actually written.
val writev : File_descr.t ‑> ?count:int ‑> string IOVec.t array ‑> intwritev 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.
external pselect : File_descr.t list ‑> File_descr.t list ‑> File_descr.t list ‑> float ‑> int list ‑> File_descr.t list * File_descr.t list * File_descr.t list = "unix_pselect_stub" pselect rfds wfds efds timeout sigmask like Core_unix.select but
also allows one to wait for the arrival of signals.
type sysconf = | ARG_MAX |
| CHILD_MAX |
| HOST_NAME_MAX |
| LOGIN_NAME_MAX |
| OPEN_MAX |
| PAGESIZE |
| RE_DUP_MAX |
| STREAM_MAX |
| SYMLOOP_MAX |
| TTY_NAME_MAX |
| TZNAME_MAX |
| POSIX_VERSION |
| PHYS_PAGES |
| AVPHYS_PAGES |
| IOV_MAX |
include sig ... endval sysconf_of_sexp : Base.Sexp.t ‑> sysconfval sexp_of_sysconf : sysconf ‑> Base.Sexp.tval sysconf_exn : sysconf ‑> int64val mkstemp : string ‑> string * File_descr.tmkstemp prefix creates and opens a unique temporary file with prefix,
automatically appending a suffix of .tmp. followed by six random characters to make
the name unique. Unlike C's mkstemp, prefix should not include six X's at the
end.
The file descriptor will have close-on-exec flag set if O_CLOEXEC flag is supported.
val mkdtemp : string ‑> stringmkdtemp prefix creates a temporary directory with prefix, automatically appending
a suffix of .tmp. followed by six random characters to make the name unique.
external abort : unit ‑> _ = "unix_abort" Causes abnormal program termination unless the signal SIGABRT is caught and the signal handler does not return. If the SIGABRT signal is blocked or ignored, the abort() function will still override it.
val getgrouplist : string ‑> int ‑> int arraygetgrouplist user group returns the list of groups to which user belongs.
See 'man getgrouplist'.
val getgroups : unit ‑> int arrayReturn the list of groups to which the user executing the process belongs.
val fnmatch : ?flags:[ `No_escape | `Pathname | `Period | `File_name | `Leading_dir | `Casefold ] list ‑> pat:string ‑> string ‑> boolno system calls involved
val wordexp : (?flags:[ `No_cmd | `Show_err | `Undef ] list ‑> string ‑> string array) Core__.Import.Or_error.tSee man page for wordexp.
module Utsname : sig ... endval if_indextoname : int ‑> stringif_indextoname ifindex If ifindex is an interface index, then
the function returns the interface name. Otherwise, it raises
Unix_error.
val mcast_join : ?ifname:string ‑> ?source:Inet_addr.t ‑> File_descr.t ‑> sockaddr ‑> unitmcast_join ?ifname sock addr join a multicast group at addr with socket sock,
from source at source if specified, optionally using network interface ifname.
val mcast_leave : ?ifname:string ‑> File_descr.t ‑> sockaddr ‑> unitmcast_leave ?ifname sock addr leaves a multicast group at addr with socket sock,
optionally using network interface ifname.
val get_mcast_ttl : File_descr.t ‑> intget_mcast_ttl sock reads the time-to-live value of outgoing multicast packets for
socket sock.
val set_mcast_ttl : File_descr.t ‑> int ‑> unitset_mcast_ttl sock ttl sets the time-to-live value of outgoing multicast packets for
socket sock to ttl.
val get_mcast_loop : File_descr.t ‑> boolget_mcast_loop sock reads the boolean argument that determines whether sent
multicast packets are looped back to local sockets.
val set_mcast_loop : File_descr.t ‑> bool ‑> unitset_mcast_loop sock loop sets the boolean argument that determines whether sent
multicast packets are looped back to local sockets.
val set_mcast_ifname : File_descr.t ‑> string ‑> unitset_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.
module Scheduler : sig ... endmodule Priority : sig ... endmodule Syslog : module type of Core__.Syslogval getifaddrs : unit ‑> Ifaddr.t listmodule Stable : sig ... end