module Unix_syscalls:sig..end
Unix_syscalls provides an interface to many of the functions in OCaml's standard
Unix module. It uses a deferred in the return type of functions that would block.
The idea is that in an async program one does not use the standard Unix module, since
in doing so one could accidentally block the whole program.
There are also a number of cosmetic changes (e.g. polymorphic variants) and other
improvements (e.g. phantom types on sockets) over the standard Unix module.
module Exit: module type of Unix.Exitmodule Exit_or_signal: module type of Unix.Exit_or_signalmodule Exit_or_signal_or_stop: module type of Unix.Exit_or_signal_or_stopval system : string -> Exit_or_signal.t Import.Deferred.tval system_exn : string -> unit Import.Deferred.tval getpid : unit -> Core.Std.Pid.tval getppid : unit -> Core.Std.Pid.t optionval getppid_exn : unit -> Core.Std.Pid.tval this_process_became_child_of_init : ?poll_delay:Core.Std.Time.Span.t -> unit -> unit Import.Deferred.tthis_process_became_child_of_init returns a deferred that becomes determined when
the current process becomes a child of init(8). This is useful to determine if one's
parent has died, because in that case init will becomes one's parent.
See Linux_ext.pr_set_pdeathsig : Signal.t -> unit for related way to get information
about parent death.
val nice : int -> intval cores : (unit -> int Import.Deferred.t) Core.Std.Or_error.tcores () Returns the number of corestypeopen_flag =[ `Append
| `Creat
| `Dsync
| `Excl
| `Noctty
| `Nonblock
| `Rdonly
| `Rdwr
| `Rsync
| `Sync
| `Trunc
| `Wronly ]
typefile_perm =int
val openfile : ?perm:file_perm ->
?close_on_exec:bool ->
string -> mode:open_flag list -> Fd.t Import.Deferred.tval with_file : ?exclusive:[ `Read | `Write ] ->
?perm:file_perm ->
string ->
mode:open_flag list ->
f:(Fd.t -> 'a Import.Deferred.t) -> 'a Import.Deferred.twith_file file ~mode ~perm ~f ?exclusive opens file, and applies f to the
resulting file descriptor. When the result of f becomes determined, it closes the
descriptor and returns the result of f. If exclusive is supplied, then the file
descriptor is locked before calling f and unlocked after calling f.module Open_flags: module type of Unix.Open_flagsval fcntl_getfl : Fd.t -> Open_flags.t Import.Deferred.tfcntl_getfl and fcntl_setf are deferred wrappers around the corresponding
functions in Core.Unix for accessing the open-file-descriptor table.val fcntl_setfl : Fd.t -> Open_flags.t -> unit Import.Deferred.tval close : ?should_close_file_descriptor:bool -> Fd.t -> unit Import.Deferred.tclose fd closes the file descriptor fd, and raises an exception if fd has
already been closed.
In some situations, one may need to cause async to release an fd that it is managing
without closing the underlying file descriptor. In that case, one should supply
~should_close_file_descriptor:false, which will skip the underlying close() system
call.
val lseek : Fd.t -> int64 -> mode:[< `Cur | `End | `Set ] -> int64 Import.Deferred.tval truncate : string -> len:int64 -> unit Import.Deferred.tval ftruncate : Fd.t -> len:int64 -> unit Import.Deferred.tval fsync : Fd.t -> unit Import.Deferred.tval fdatasync : Fd.t -> unit Import.Deferred.tval sync : unit -> unit Import.Deferred.tval lockf : ?len:Core.Std.Int64.t -> Fd.t -> [ `Read | `Write ] -> unit Import.Deferred.tlockf fd read_or_write ?len exclusively locks for reading/writing the section of the
open file fd specified by the current file position and len (see man lockf). It
returns when the lock has been acquired. It raises if fd is closed.val try_lockf : ?len:Core.Std.Int64.t -> Fd.t -> [ `Read | `Write ] -> booltry_lockf fd read_or_write ?len attempts to exclusively lock for reading/writing the
section of the open file fd specified by the current file position and len (see
man lockf). It returns true if it acquired the lock. It raises if fd is
closed.val test_lockf : ?len:Core.Std.Int64.t -> Fd.t -> boollockf_is_locked fd ?len checks the lock on section of the open file fd specified
by the current file position and len (see man lockf). If the section is unlocked or
locked by this process, it returns true, else it returns false. It raises if fd is
closed.val unlockf : ?len:Core.Std.Int64.t -> Fd.t -> unitunlockf fd ?len unlocks the section of the open file fd specified by the current
file position and len (see man lockf). It raises if fd is closed.module File_kind:sig..end
module Stats:sig..end
val fstat : Fd.t -> Stats.t Import.Deferred.tval stat : string -> Stats.t Import.Deferred.tval lstat : string -> Stats.t Import.Deferred.tval unlink : string -> unit Import.Deferred.tval remove : string -> unit Import.Deferred.tval rename : src:string -> dst:string -> unit Import.Deferred.tval link : ?force:bool ->
target:string -> link_name:string -> unit -> unit Import.Deferred.tval chmod : string -> perm:file_perm -> unit Import.Deferred.tval fchmod : Fd.t -> perm:file_perm -> unit Import.Deferred.tval chown : string -> uid:int -> gid:int -> unit Import.Deferred.tval fchown : Fd.t -> uid:int -> gid:int -> unit Import.Deferred.tval access : string ->
[ `Exec | `Exists | `Read | `Write ] list ->
(unit, exn) Core.Std.Result.t Import.Deferred.tval access_exn : string -> [ `Exec | `Exists | `Read | `Write ] list -> unit Import.Deferred.tval set_close_on_exec : Fd.t -> unitval clear_close_on_exec : Fd.t -> unitval mkdir : ?p:unit -> ?perm:file_perm -> string -> unit Import.Deferred.tval rmdir : string -> unit Import.Deferred.tval chdir : string -> unit Import.Deferred.tval getcwd : unit -> string Import.Deferred.tval chroot : string -> unit Import.Deferred.ttypedir_handle =Core.Unix.dir_handle
val opendir : string -> dir_handle Import.Deferred.tval readdir : dir_handle -> string Import.Deferred.tval rewinddir : dir_handle -> unit Import.Deferred.tval closedir : dir_handle -> unit Import.Deferred.tval pipe : Core.Std.Info.t ->
([ `Reader of Fd.t ] * [ `Writer of Fd.t ]) Import.Deferred.tinfo supplied to pipe is debugging information that will be included in the
returned Fds.val mkfifo : ?perm:file_perm -> string -> unit Import.Deferred.tval symlink : src:string -> dst:string -> unit Import.Deferred.tval readlink : string -> string Import.Deferred.tval mkstemp : string -> (string * Fd.t) Import.Deferred.tmkstemp 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.val mkdtemp : string -> string Import.Deferred.ttypeprocess_times =Core.Unix.process_times= {
|
tms_utime : |
(* | User time for the process | *) |
|
tms_stime : |
(* | System time for the process | *) |
|
tms_cutime : |
(* | User time for the children processes | *) |
|
tms_cstime : |
(* | System time for the children processes | *) |
val times : unit -> process_timestypetm =Core.Unix.tm= {
|
tm_sec : |
(* | Seconds 0..59 | *) |
|
tm_min : |
(* | Minutes 0..59 | *) |
|
tm_hour : |
(* | Hours 0..23 | *) |
|
tm_mday : |
(* | Day of month 1..31 | *) |
|
tm_mon : |
(* | Month of year 0..11 | *) |
|
tm_year : |
(* | Year - 1900 | *) |
|
tm_wday : |
(* | Day of week (Sunday is 0) | *) |
|
tm_yday : |
(* | Day of year 0..365 | *) |
|
tm_isdst : |
(* | Daylight time savings in effect | *) |
val time : unit -> floatval gettimeofday : unit -> floatval gmtime : float -> tmval localtime : float -> tmval mktime : tm -> float * tmval utimes : string -> access:float -> modif:float -> unit Import.Deferred.tval environment : unit -> string arrayval getenv : string -> string optionval getenv_exn : string -> stringval putenv : key:string -> data:string -> unitval unsetenv : string -> unitval fork_exec : prog:string ->
args:string list ->
?use_path:bool ->
?env:string list -> unit -> Core.Std.Pid.t Import.Deferred.tfork_exec ~prog ~args ?path ?env forks and execs prog with args, and returns the
child pid. If use_path = true (the default) and prog doesn't contain a slash,
then fork_exec searches the PATH environment variable for prog. If env is
supplied, it is used as the environment when prog is executed.typewait_on =[ `Any | `Group of Core.Std.Pid.t | `My_group | `Pid of Core.Std.Pid.t ]
val wait : wait_on ->
(Core.Std.Pid.t * Exit_or_signal.t) Import.Deferred.tval wait_nohang : wait_on ->
(Core.Std.Pid.t * Exit_or_signal.t) optionval wait_untraced : wait_on ->
(Core.Std.Pid.t * Exit_or_signal_or_stop.t) Import.Deferred.tval wait_nohang_untraced : wait_on ->
(Core.Std.Pid.t * Exit_or_signal_or_stop.t) optionval waitpid : Core.Std.Pid.t -> Exit_or_signal.t Import.Deferred.twaitpid pid returns a deferred that becomes determined with the child's exit
status, when the child process with process id pid exits. waitpid_exn is like
waitpid, except the result only becomes determined if the child exits with status
zero; it raises if the child terminates win any other way.val waitpid_exn : Core.Std.Pid.t -> unit Import.Deferred.tmodule Inet_addr:sig..end
module Protocol_family:sig..end
val socketpair : unit -> Fd.t * Fd.tmodule Socket:sig..end
module Host:sig..end
val gethostname : unit -> stringval getuid : unit -> intval geteuid : unit -> intval getgid : unit -> intval getegid : unit -> intval setuid : int -> unittypeerror =Core.Unix.error=
| |
E2BIG |
| |
EACCES |
| |
EAGAIN |
| |
EBADF |
| |
EBUSY |
| |
ECHILD |
| |
EDEADLK |
| |
EDOM |
| |
EEXIST |
| |
EFAULT |
| |
EFBIG |
| |
EINTR |
| |
EINVAL |
| |
EIO |
| |
EISDIR |
| |
EMFILE |
| |
EMLINK |
| |
ENAMETOOLONG |
| |
ENFILE |
| |
ENODEV |
| |
ENOENT |
| |
ENOEXEC |
| |
ENOLCK |
| |
ENOMEM |
| |
ENOSPC |
| |
ENOSYS |
| |
ENOTDIR |
| |
ENOTEMPTY |
| |
ENOTTY |
| |
ENXIO |
| |
EPERM |
| |
EPIPE |
| |
ERANGE |
| |
EROFS |
| |
ESPIPE |
| |
ESRCH |
| |
EXDEV |
| |
EWOULDBLOCK |
| |
EINPROGRESS |
| |
EALREADY |
| |
ENOTSOCK |
| |
EDESTADDRREQ |
| |
EMSGSIZE |
| |
EPROTOTYPE |
| |
ENOPROTOOPT |
| |
EPROTONOSUPPORT |
| |
ESOCKTNOSUPPORT |
| |
EOPNOTSUPP |
| |
EPFNOSUPPORT |
| |
EAFNOSUPPORT |
| |
EADDRINUSE |
| |
EADDRNOTAVAIL |
| |
ENETDOWN |
| |
ENETUNREACH |
| |
ENETRESET |
| |
ECONNABORTED |
| |
ECONNRESET |
| |
ENOBUFS |
| |
EISCONN |
| |
ENOTCONN |
| |
ESHUTDOWN |
| |
ETOOMANYREFS |
| |
ETIMEDOUT |
| |
ECONNREFUSED |
| |
EHOSTDOWN |
| |
EHOSTUNREACH |
| |
ELOOP |
| |
EOVERFLOW |
| |
EUNKNOWNERR of |
exception Unix_error of error * string * string
module Terminal_io:sig..end
module Passwd:sig..end
passwd database.
module Group:sig..end
groups database.
val getlogin : unit -> string Import.Deferred.t
This returns a deferred because the username may need to be looked up in what is
essentially a database elsewhere on the network (winbound user, or NIS).
val wordexp : (?flags:[ `No_cmd | `Show_err | `Undef ] list ->
string -> string array Import.Deferred.t)
Core.Std.Or_error.tval wait_on_of_sexp : Sexplib.Sexp.t -> wait_onval __wait_on_of_sexp__ : Sexplib.Sexp.t -> wait_onval sexp_of_wait_on : wait_on -> Sexplib.Sexp.twaitpid pid returns a deferred that becomes determined with the child's exit
status, when the child process with process id pid exits. waitpid_exn is like
waitpid, except the result only becomes determined if the child exits with status
zero; it raises if the child terminates win any other way.Core.Unix127.0.0.1::1)of_string_or_getbyname hostname does a DNS lookup of hostname and returns the
resulting IP address. The implemenation sequentializes all calls so that only a
single call is active at a time. The is because we've observed thread safety issues
with certain versions of winbind using "wins" name resolution.
Unconnected ---connect--> Active
|
| ---bind--> Bound ---listen--> Passive ---accept---> Active
bind socket addr sets close_on_exec for the fd of socket.val error_of_sexp : Sexplib.Sexp.t -> errorval sexp_of_error : error -> Sexplib.Sexp.tpasswd database.groups database.
This returns a deferred because the username may need to be looked up in what is
essentially a database elsewhere on the network (winbound user, or NIS).