sig type 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 int exception Unix_error of Unix.error * string * string val error_message : Unix.error -> string val handle_unix_error : ('a -> 'b) -> 'a -> 'b val environment : unit -> string array val unsafe_environment : unit -> string array val getenv : string -> string val unsafe_getenv : string -> string val putenv : string -> string -> unit type process_status = WEXITED of int | WSIGNALED of int | WSTOPPED of int type wait_flag = WNOHANG | WUNTRACED val execv : string -> string array -> 'a val execve : string -> string array -> string array -> 'a val execvp : string -> string array -> 'a val execvpe : string -> string array -> string array -> 'a val fork : unit -> int val wait : unit -> int * Unix.process_status val waitpid : Unix.wait_flag list -> int -> int * Unix.process_status val system : string -> Unix.process_status val _exit : int -> 'a val getpid : unit -> int val getppid : unit -> int val nice : int -> int type file_descr val stdin : Unix.file_descr val stdout : Unix.file_descr val stderr : Unix.file_descr type open_flag = O_RDONLY | O_WRONLY | O_RDWR | O_NONBLOCK | O_APPEND | O_CREAT | O_TRUNC | O_EXCL | O_NOCTTY | O_DSYNC | O_SYNC | O_RSYNC | O_SHARE_DELETE | O_CLOEXEC | O_KEEPEXEC type file_perm = int val openfile : string -> Unix.open_flag list -> Unix.file_perm -> Unix.file_descr val close : Unix.file_descr -> unit val fsync : Unix.file_descr -> unit val read : Unix.file_descr -> bytes -> int -> int -> int val write : Unix.file_descr -> bytes -> int -> int -> int val single_write : Unix.file_descr -> bytes -> int -> int -> int val write_substring : Unix.file_descr -> string -> int -> int -> int val single_write_substring : Unix.file_descr -> string -> int -> int -> int val in_channel_of_descr : Unix.file_descr -> Stdlib.in_channel val out_channel_of_descr : Unix.file_descr -> Stdlib.out_channel val descr_of_in_channel : Stdlib.in_channel -> Unix.file_descr val descr_of_out_channel : Stdlib.out_channel -> Unix.file_descr type seek_command = SEEK_SET | SEEK_CUR | SEEK_END val lseek : Unix.file_descr -> int -> Unix.seek_command -> int val truncate : string -> int -> unit val ftruncate : Unix.file_descr -> int -> unit type file_kind = S_REG | S_DIR | S_CHR | S_BLK | S_LNK | S_FIFO | S_SOCK type stats = { st_dev : int; st_ino : int; st_kind : Unix.file_kind; st_perm : Unix.file_perm; st_nlink : int; st_uid : int; st_gid : int; st_rdev : int; st_size : int; st_atime : float; st_mtime : float; st_ctime : float; } val stat : string -> Unix.stats val lstat : string -> Unix.stats val fstat : Unix.file_descr -> Unix.stats val isatty : Unix.file_descr -> bool module LargeFile : sig val lseek : Unix.file_descr -> int64 -> Unix.seek_command -> int64 val truncate : string -> int64 -> unit val ftruncate : Unix.file_descr -> int64 -> unit type stats = { st_dev : int; st_ino : int; st_kind : Unix.file_kind; st_perm : Unix.file_perm; st_nlink : int; st_uid : int; st_gid : int; st_rdev : int; st_size : int64; st_atime : float; st_mtime : float; st_ctime : float; } val stat : string -> Unix.LargeFile.stats val lstat : string -> Unix.LargeFile.stats val fstat : Unix.file_descr -> Unix.LargeFile.stats end val map_file : Unix.file_descr -> ?pos:int64 -> ('a, 'b) Stdlib.Bigarray.kind -> 'c Stdlib.Bigarray.layout -> bool -> int array -> ('a, 'b, 'c) Stdlib.Bigarray.Genarray.t val unlink : string -> unit val rename : string -> string -> unit val link : ?follow:bool -> string -> string -> unit val realpath : string -> string type access_permission = R_OK | W_OK | X_OK | F_OK val chmod : string -> Unix.file_perm -> unit val fchmod : Unix.file_descr -> Unix.file_perm -> unit val chown : string -> int -> int -> unit val fchown : Unix.file_descr -> int -> int -> unit val umask : int -> int val access : string -> Unix.access_permission list -> unit val dup : ?cloexec:bool -> Unix.file_descr -> Unix.file_descr val dup2 : ?cloexec:bool -> Unix.file_descr -> Unix.file_descr -> unit val set_nonblock : Unix.file_descr -> unit val clear_nonblock : Unix.file_descr -> unit val set_close_on_exec : Unix.file_descr -> unit val clear_close_on_exec : Unix.file_descr -> unit val mkdir : string -> Unix.file_perm -> unit val rmdir : string -> unit val chdir : string -> unit val getcwd : unit -> string val chroot : string -> unit type dir_handle val opendir : string -> Unix.dir_handle val readdir : Unix.dir_handle -> string val rewinddir : Unix.dir_handle -> unit val closedir : Unix.dir_handle -> unit val pipe : ?cloexec:bool -> unit -> Unix.file_descr * Unix.file_descr val mkfifo : string -> Unix.file_perm -> unit val create_process : string -> string array -> Unix.file_descr -> Unix.file_descr -> Unix.file_descr -> int val create_process_env : string -> string array -> string array -> Unix.file_descr -> Unix.file_descr -> Unix.file_descr -> int val open_process_in : string -> Stdlib.in_channel val open_process_out : string -> Stdlib.out_channel val open_process : string -> Stdlib.in_channel * Stdlib.out_channel val open_process_full : string -> string array -> Stdlib.in_channel * Stdlib.out_channel * Stdlib.in_channel val open_process_args_in : string -> string array -> Stdlib.in_channel val open_process_args_out : string -> string array -> Stdlib.out_channel val open_process_args : string -> string array -> Stdlib.in_channel * Stdlib.out_channel val open_process_args_full : string -> string array -> string array -> Stdlib.in_channel * Stdlib.out_channel * Stdlib.in_channel val process_in_pid : Stdlib.in_channel -> int val process_out_pid : Stdlib.out_channel -> int val process_pid : Stdlib.in_channel * Stdlib.out_channel -> int val process_full_pid : Stdlib.in_channel * Stdlib.out_channel * Stdlib.in_channel -> int val close_process_in : Stdlib.in_channel -> Unix.process_status val close_process_out : Stdlib.out_channel -> Unix.process_status val close_process : Stdlib.in_channel * Stdlib.out_channel -> Unix.process_status val close_process_full : Stdlib.in_channel * Stdlib.out_channel * Stdlib.in_channel -> Unix.process_status val symlink : ?to_dir:bool -> string -> string -> unit val has_symlink : unit -> bool val readlink : string -> string val select : Unix.file_descr list -> Unix.file_descr list -> Unix.file_descr list -> float -> Unix.file_descr list * Unix.file_descr list * Unix.file_descr list type lock_command = F_ULOCK | F_LOCK | F_TLOCK | F_TEST | F_RLOCK | F_TRLOCK val lockf : Unix.file_descr -> Unix.lock_command -> int -> unit val kill : int -> int -> unit type sigprocmask_command = SIG_SETMASK | SIG_BLOCK | SIG_UNBLOCK val sigprocmask : Unix.sigprocmask_command -> int list -> int list val sigpending : unit -> int list val sigsuspend : int list -> unit val pause : unit -> unit type process_times = { tms_utime : float; tms_stime : float; tms_cutime : float; tms_cstime : float; } type tm = { tm_sec : int; tm_min : int; tm_hour : int; tm_mday : int; tm_mon : int; tm_year : int; tm_wday : int; tm_yday : int; tm_isdst : bool; } val time : unit -> float val gettimeofday : unit -> float val gmtime : float -> Unix.tm val localtime : float -> Unix.tm val mktime : Unix.tm -> float * Unix.tm val alarm : int -> int val sleep : int -> unit val sleepf : float -> unit val times : unit -> Unix.process_times val utimes : string -> float -> float -> unit type interval_timer = ITIMER_REAL | ITIMER_VIRTUAL | ITIMER_PROF type interval_timer_status = { it_interval : float; it_value : float; } val getitimer : Unix.interval_timer -> Unix.interval_timer_status val setitimer : Unix.interval_timer -> Unix.interval_timer_status -> Unix.interval_timer_status val getuid : unit -> int val geteuid : unit -> int val setuid : int -> unit val getgid : unit -> int val getegid : unit -> int val setgid : int -> unit val getgroups : unit -> int array val setgroups : int array -> unit val initgroups : string -> int -> unit type passwd_entry = { pw_name : string; pw_passwd : string; pw_uid : int; pw_gid : int; pw_gecos : string; pw_dir : string; pw_shell : string; } type group_entry = { gr_name : string; gr_passwd : string; gr_gid : int; gr_mem : string array; } val getlogin : unit -> string val getpwnam : string -> Unix.passwd_entry val getgrnam : string -> Unix.group_entry val getpwuid : int -> Unix.passwd_entry val getgrgid : int -> Unix.group_entry type inet_addr val inet_addr_of_string : string -> Unix.inet_addr val string_of_inet_addr : Unix.inet_addr -> string val inet_addr_any : Unix.inet_addr val inet_addr_loopback : Unix.inet_addr val inet6_addr_any : Unix.inet_addr val inet6_addr_loopback : Unix.inet_addr val is_inet6_addr : Unix.inet_addr -> bool type socket_domain = PF_UNIX | PF_INET | PF_INET6 type socket_type = SOCK_STREAM | SOCK_DGRAM | SOCK_RAW | SOCK_SEQPACKET type sockaddr = ADDR_UNIX of string | ADDR_INET of Unix.inet_addr * int val socket : ?cloexec:bool -> Unix.socket_domain -> Unix.socket_type -> int -> Unix.file_descr val domain_of_sockaddr : Unix.sockaddr -> Unix.socket_domain val socketpair : ?cloexec:bool -> Unix.socket_domain -> Unix.socket_type -> int -> Unix.file_descr * Unix.file_descr val accept : ?cloexec:bool -> Unix.file_descr -> Unix.file_descr * Unix.sockaddr val bind : Unix.file_descr -> Unix.sockaddr -> unit val connect : Unix.file_descr -> Unix.sockaddr -> unit val listen : Unix.file_descr -> int -> unit type shutdown_command = SHUTDOWN_RECEIVE | SHUTDOWN_SEND | SHUTDOWN_ALL val shutdown : Unix.file_descr -> Unix.shutdown_command -> unit val getsockname : Unix.file_descr -> Unix.sockaddr val getpeername : Unix.file_descr -> Unix.sockaddr type msg_flag = MSG_OOB | MSG_DONTROUTE | MSG_PEEK val recv : Unix.file_descr -> bytes -> int -> int -> Unix.msg_flag list -> int val recvfrom : Unix.file_descr -> bytes -> int -> int -> Unix.msg_flag list -> int * Unix.sockaddr val send : Unix.file_descr -> bytes -> int -> int -> Unix.msg_flag list -> int val send_substring : Unix.file_descr -> string -> int -> int -> Unix.msg_flag list -> int val sendto : Unix.file_descr -> bytes -> int -> int -> Unix.msg_flag list -> Unix.sockaddr -> int val sendto_substring : Unix.file_descr -> string -> int -> int -> Unix.msg_flag list -> Unix.sockaddr -> int type socket_bool_option = SO_DEBUG | SO_BROADCAST | SO_REUSEADDR | SO_KEEPALIVE | SO_DONTROUTE | SO_OOBINLINE | SO_ACCEPTCONN | TCP_NODELAY | IPV6_ONLY | SO_REUSEPORT type socket_int_option = SO_SNDBUF | SO_RCVBUF | SO_ERROR | SO_TYPE | SO_RCVLOWAT | SO_SNDLOWAT type socket_optint_option = SO_LINGER type socket_float_option = SO_RCVTIMEO | SO_SNDTIMEO val getsockopt : Unix.file_descr -> Unix.socket_bool_option -> bool val setsockopt : Unix.file_descr -> Unix.socket_bool_option -> bool -> unit val getsockopt_int : Unix.file_descr -> Unix.socket_int_option -> int val setsockopt_int : Unix.file_descr -> Unix.socket_int_option -> int -> unit val getsockopt_optint : Unix.file_descr -> Unix.socket_optint_option -> int option val setsockopt_optint : Unix.file_descr -> Unix.socket_optint_option -> int option -> unit val getsockopt_float : Unix.file_descr -> Unix.socket_float_option -> float val setsockopt_float : Unix.file_descr -> Unix.socket_float_option -> float -> unit val getsockopt_error : Unix.file_descr -> Unix.error option val open_connection : Unix.sockaddr -> Stdlib.in_channel * Stdlib.out_channel val shutdown_connection : Stdlib.in_channel -> unit val establish_server : (Stdlib.in_channel -> Stdlib.out_channel -> unit) -> Unix.sockaddr -> unit type host_entry = { h_name : string; h_aliases : string array; h_addrtype : Unix.socket_domain; h_addr_list : Unix.inet_addr array; } type protocol_entry = { p_name : string; p_aliases : string array; p_proto : int; } type service_entry = { s_name : string; s_aliases : string array; s_port : int; s_proto : string; } val gethostname : unit -> string val gethostbyname : string -> Unix.host_entry val gethostbyaddr : Unix.inet_addr -> Unix.host_entry val getprotobyname : string -> Unix.protocol_entry val getprotobynumber : int -> Unix.protocol_entry val getservbyname : string -> string -> Unix.service_entry val getservbyport : int -> string -> Unix.service_entry type addr_info = { ai_family : Unix.socket_domain; ai_socktype : Unix.socket_type; ai_protocol : int; ai_addr : Unix.sockaddr; ai_canonname : string; } type getaddrinfo_option = AI_FAMILY of Unix.socket_domain | AI_SOCKTYPE of Unix.socket_type | AI_PROTOCOL of int | AI_NUMERICHOST | AI_CANONNAME | AI_PASSIVE val getaddrinfo : string -> string -> Unix.getaddrinfo_option list -> Unix.addr_info list type name_info = { ni_hostname : string; ni_service : string; } type getnameinfo_option = NI_NOFQDN | NI_NUMERICHOST | NI_NAMEREQD | NI_NUMERICSERV | NI_DGRAM val getnameinfo : Unix.sockaddr -> Unix.getnameinfo_option list -> Unix.name_info type terminal_io = { mutable c_ignbrk : bool; mutable c_brkint : bool; mutable c_ignpar : bool; mutable c_parmrk : bool; mutable c_inpck : bool; mutable c_istrip : bool; mutable c_inlcr : bool; mutable c_igncr : bool; mutable c_icrnl : bool; mutable c_ixon : bool; mutable c_ixoff : bool; mutable c_opost : bool; mutable c_obaud : int; mutable c_ibaud : int; mutable c_csize : int; mutable c_cstopb : int; mutable c_cread : bool; mutable c_parenb : bool; mutable c_parodd : bool; mutable c_hupcl : bool; mutable c_clocal : bool; mutable c_isig : bool; mutable c_icanon : bool; mutable c_noflsh : bool; mutable c_echo : bool; mutable c_echoe : bool; mutable c_echok : bool; mutable c_echonl : bool; mutable c_vintr : char; mutable c_vquit : char; mutable c_verase : char; mutable c_vkill : char; mutable c_veof : char; mutable c_veol : char; mutable c_vmin : int; mutable c_vtime : int; mutable c_vstart : char; mutable c_vstop : char; } val tcgetattr : Unix.file_descr -> Unix.terminal_io type setattr_when = TCSANOW | TCSADRAIN | TCSAFLUSH val tcsetattr : Unix.file_descr -> Unix.setattr_when -> Unix.terminal_io -> unit val tcsendbreak : Unix.file_descr -> int -> unit val tcdrain : Unix.file_descr -> unit type flush_queue = TCIFLUSH | TCOFLUSH | TCIOFLUSH val tcflush : Unix.file_descr -> Unix.flush_queue -> unit type flow_action = TCOOFF | TCOON | TCIOFF | TCION val tcflow : Unix.file_descr -> Unix.flow_action -> unit val setsid : unit -> int end