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 : ('-> 'b) -> '-> 'b   val environment : unit -> string array   val 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 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   type file_perm = int   val openfile :     string -> Unix.open_flag list -> Unix.file_perm -> Unix.file_descr   val close : 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 -> Pervasives.in_channel   val out_channel_of_descr : Unix.file_descr -> Pervasives.out_channel   val descr_of_in_channel : Pervasives.in_channel -> Unix.file_descr   val descr_of_out_channel : Pervasives.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 unlink : string -> unit   val rename : string -> string -> unit   val link : string -> string -> unit   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 : Unix.file_descr -> Unix.file_descr   val dup2 : 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 : 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 -> Pervasives.in_channel   val open_process_out : string -> Pervasives.out_channel   val open_process : string -> Pervasives.in_channel * Pervasives.out_channel   val open_process_full :     string ->     string array ->     Pervasives.in_channel * Pervasives.out_channel * Pervasives.in_channel   val close_process_in : Pervasives.in_channel -> Unix.process_status   val close_process_out : Pervasives.out_channel -> Unix.process_status   val close_process :     Pervasives.in_channel * Pervasives.out_channel -> Unix.process_status   val close_process_full :     Pervasives.in_channel * Pervasives.out_channel * Pervasives.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   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 :     Unix.socket_domain -> Unix.socket_type -> int -> Unix.file_descr   val domain_of_sockaddr : Unix.sockaddr -> Unix.socket_domain   val socketpair :     Unix.socket_domain ->     Unix.socket_type -> int -> Unix.file_descr * Unix.file_descr   val accept : 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   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 -> Pervasives.in_channel * Pervasives.out_channel   val shutdown_connection : Pervasives.in_channel -> unit   val establish_server :     (Pervasives.in_channel -> Pervasives.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