sig   type error =     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 int   exception Unix_error of UnixLabels.error * string * string   val error_message : UnixLabels.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 =     Unix.process_status =       WEXITED of int     | WSIGNALED of int     | WSTOPPED of int   type wait_flag = Unix.wait_flag = WNOHANG | WUNTRACED   val execv : prog:string -> args:string array -> 'a   val execve : prog:string -> args:string array -> env:string array -> 'a   val execvp : prog:string -> args:string array -> 'a   val execvpe : prog:string -> args:string array -> env:string array -> 'a   val fork : unit -> int   val wait : unit -> int * UnixLabels.process_status   val waitpid :     mode:UnixLabels.wait_flag list -> int -> int * UnixLabels.process_status   val system : string -> UnixLabels.process_status   val getpid : unit -> int   val getppid : unit -> int   val nice : int -> int   type file_descr = Unix.file_descr   val stdin : UnixLabels.file_descr   val stdout : UnixLabels.file_descr   val stderr : UnixLabels.file_descr   type open_flag =     Unix.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 ->     mode:UnixLabels.open_flag list ->     perm:UnixLabels.file_perm -> UnixLabels.file_descr   val close : UnixLabels.file_descr -> unit   val read : UnixLabels.file_descr -> buf:bytes -> pos:int -> len:int -> int   val write : UnixLabels.file_descr -> buf:bytes -> pos:int -> len:int -> int   val single_write :     UnixLabels.file_descr -> buf:bytes -> pos:int -> len:int -> int   val write_substring :     UnixLabels.file_descr -> buf:string -> pos:int -> len:int -> int   val single_write_substring :     UnixLabels.file_descr -> buf:string -> pos:int -> len:int -> int   val in_channel_of_descr : UnixLabels.file_descr -> Pervasives.in_channel   val out_channel_of_descr : UnixLabels.file_descr -> Pervasives.out_channel   val descr_of_in_channel : Pervasives.in_channel -> UnixLabels.file_descr   val descr_of_out_channel : Pervasives.out_channel -> UnixLabels.file_descr   type seek_command = Unix.seek_command = SEEK_SET | SEEK_CUR | SEEK_END   val lseek :     UnixLabels.file_descr -> int -> mode:UnixLabels.seek_command -> int   val truncate : string -> len:int -> unit   val ftruncate : UnixLabels.file_descr -> len:int -> unit   type file_kind =     Unix.file_kind =       S_REG     | S_DIR     | S_CHR     | S_BLK     | S_LNK     | S_FIFO     | S_SOCK   type stats =     Unix.stats = {     st_dev : int;     st_ino : int;     st_kind : UnixLabels.file_kind;     st_perm : UnixLabels.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 -> UnixLabels.stats   val lstat : string -> UnixLabels.stats   val fstat : UnixLabels.file_descr -> UnixLabels.stats   val isatty : UnixLabels.file_descr -> bool   module LargeFile :     sig       val lseek :         UnixLabels.file_descr ->         int64 -> mode:UnixLabels.seek_command -> int64       val truncate : string -> len:int64 -> unit       val ftruncate : UnixLabels.file_descr -> len:int64 -> unit       type stats =         Unix.LargeFile.stats = {         st_dev : int;         st_ino : int;         st_kind : UnixLabels.file_kind;         st_perm : UnixLabels.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 -> UnixLabels.LargeFile.stats       val lstat : string -> UnixLabels.LargeFile.stats       val fstat : UnixLabels.file_descr -> UnixLabels.LargeFile.stats     end   val unlink : string -> unit   val rename : src:string -> dst:string -> unit   val link : src:string -> dst:string -> unit   type access_permission = Unix.access_permission = R_OK | W_OK | X_OK | F_OK   val chmod : string -> perm:UnixLabels.file_perm -> unit   val fchmod : UnixLabels.file_descr -> perm:UnixLabels.file_perm -> unit   val chown : string -> uid:int -> gid:int -> unit   val fchown : UnixLabels.file_descr -> uid:int -> gid:int -> unit   val umask : int -> int   val access : string -> perm:UnixLabels.access_permission list -> unit   val dup : UnixLabels.file_descr -> UnixLabels.file_descr   val dup2 : src:UnixLabels.file_descr -> dst:UnixLabels.file_descr -> unit   val set_nonblock : UnixLabels.file_descr -> unit   val clear_nonblock : UnixLabels.file_descr -> unit   val set_close_on_exec : UnixLabels.file_descr -> unit   val clear_close_on_exec : UnixLabels.file_descr -> unit   val mkdir : string -> perm:UnixLabels.file_perm -> unit   val rmdir : string -> unit   val chdir : string -> unit   val getcwd : unit -> string   val chroot : string -> unit   type dir_handle = Unix.dir_handle   val opendir : string -> UnixLabels.dir_handle   val readdir : UnixLabels.dir_handle -> string   val rewinddir : UnixLabels.dir_handle -> unit   val closedir : UnixLabels.dir_handle -> unit   val pipe : unit -> UnixLabels.file_descr * UnixLabels.file_descr   val mkfifo : string -> perm:UnixLabels.file_perm -> unit   val create_process :     prog:string ->     args:string array ->     stdin:UnixLabels.file_descr ->     stdout:UnixLabels.file_descr -> stderr:UnixLabels.file_descr -> int   val create_process_env :     prog:string ->     args:string array ->     env:string array ->     stdin:UnixLabels.file_descr ->     stdout:UnixLabels.file_descr -> stderr:UnixLabels.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 ->     env:string array ->     Pervasives.in_channel * Pervasives.out_channel * Pervasives.in_channel   val close_process_in : Pervasives.in_channel -> UnixLabels.process_status   val close_process_out : Pervasives.out_channel -> UnixLabels.process_status   val close_process :     Pervasives.in_channel * Pervasives.out_channel ->     UnixLabels.process_status   val close_process_full :     Pervasives.in_channel * Pervasives.out_channel * Pervasives.in_channel ->     UnixLabels.process_status   val symlink : ?to_dir:bool -> src:string -> dst:string -> unit   val has_symlink : unit -> bool   val readlink : string -> string   val select :     read:UnixLabels.file_descr list ->     write:UnixLabels.file_descr list ->     except:UnixLabels.file_descr list ->     timeout:float ->     UnixLabels.file_descr list * UnixLabels.file_descr list *     UnixLabels.file_descr list   type lock_command =     Unix.lock_command =       F_ULOCK     | F_LOCK     | F_TLOCK     | F_TEST     | F_RLOCK     | F_TRLOCK   val lockf :     UnixLabels.file_descr -> mode:UnixLabels.lock_command -> len:int -> unit   val kill : pid:int -> signal:int -> unit   type sigprocmask_command =     Unix.sigprocmask_command =       SIG_SETMASK     | SIG_BLOCK     | SIG_UNBLOCK   val sigprocmask :     mode:UnixLabels.sigprocmask_command -> int list -> int list   val sigpending : unit -> int list   val sigsuspend : int list -> unit   val pause : unit -> unit   type process_times =     Unix.process_times = {     tms_utime : float;     tms_stime : float;     tms_cutime : float;     tms_cstime : float;   }   type tm =     Unix.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 -> UnixLabels.tm   val localtime : float -> UnixLabels.tm   val mktime : UnixLabels.tm -> float * UnixLabels.tm   val alarm : int -> int   val sleep : int -> unit   val times : unit -> UnixLabels.process_times   val utimes : string -> access:float -> modif:float -> unit   type interval_timer =     Unix.interval_timer =       ITIMER_REAL     | ITIMER_VIRTUAL     | ITIMER_PROF   type interval_timer_status =     Unix.interval_timer_status = {     it_interval : float;     it_value : float;   }   val getitimer :     UnixLabels.interval_timer -> UnixLabels.interval_timer_status   val setitimer :     UnixLabels.interval_timer ->     UnixLabels.interval_timer_status -> UnixLabels.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 =     Unix.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 =     Unix.group_entry = {     gr_name : string;     gr_passwd : string;     gr_gid : int;     gr_mem : string array;   }   val getlogin : unit -> string   val getpwnam : string -> UnixLabels.passwd_entry   val getgrnam : string -> UnixLabels.group_entry   val getpwuid : int -> UnixLabels.passwd_entry   val getgrgid : int -> UnixLabels.group_entry   type inet_addr = Unix.inet_addr   val inet_addr_of_string : string -> UnixLabels.inet_addr   val string_of_inet_addr : UnixLabels.inet_addr -> string   val inet_addr_any : UnixLabels.inet_addr   val inet_addr_loopback : UnixLabels.inet_addr   val inet6_addr_any : UnixLabels.inet_addr   val inet6_addr_loopback : UnixLabels.inet_addr   type socket_domain = Unix.socket_domain = PF_UNIX | PF_INET | PF_INET6   type socket_type =     Unix.socket_type =       SOCK_STREAM     | SOCK_DGRAM     | SOCK_RAW     | SOCK_SEQPACKET   type sockaddr =     Unix.sockaddr =       ADDR_UNIX of string     | ADDR_INET of UnixLabels.inet_addr * int   val socket :     domain:UnixLabels.socket_domain ->     kind:UnixLabels.socket_type -> protocol:int -> UnixLabels.file_descr   val domain_of_sockaddr : UnixLabels.sockaddr -> UnixLabels.socket_domain   val socketpair :     domain:UnixLabels.socket_domain ->     kind:UnixLabels.socket_type ->     protocol:int -> UnixLabels.file_descr * UnixLabels.file_descr   val accept :     UnixLabels.file_descr -> UnixLabels.file_descr * UnixLabels.sockaddr   val bind : UnixLabels.file_descr -> addr:UnixLabels.sockaddr -> unit   val connect : UnixLabels.file_descr -> addr:UnixLabels.sockaddr -> unit   val listen : UnixLabels.file_descr -> max:int -> unit   type shutdown_command =     Unix.shutdown_command =       SHUTDOWN_RECEIVE     | SHUTDOWN_SEND     | SHUTDOWN_ALL   val shutdown :     UnixLabels.file_descr -> mode:UnixLabels.shutdown_command -> unit   val getsockname : UnixLabels.file_descr -> UnixLabels.sockaddr   val getpeername : UnixLabels.file_descr -> UnixLabels.sockaddr   type msg_flag = Unix.msg_flag = MSG_OOB | MSG_DONTROUTE | MSG_PEEK   val recv :     UnixLabels.file_descr ->     buf:bytes -> pos:int -> len:int -> mode:UnixLabels.msg_flag list -> int   val recvfrom :     UnixLabels.file_descr ->     buf:bytes ->     pos:int ->     len:int -> mode:UnixLabels.msg_flag list -> int * UnixLabels.sockaddr   val send :     UnixLabels.file_descr ->     buf:bytes -> pos:int -> len:int -> mode:UnixLabels.msg_flag list -> int   val send_substring :     UnixLabels.file_descr ->     buf:string -> pos:int -> len:int -> mode:UnixLabels.msg_flag list -> int   val sendto :     UnixLabels.file_descr ->     buf:bytes ->     pos:int ->     len:int ->     mode:UnixLabels.msg_flag list -> addr:UnixLabels.sockaddr -> int   val sendto_substring :     UnixLabels.file_descr ->     bug:string ->     pos:int ->     len:int -> mode:UnixLabels.msg_flag list -> UnixLabels.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 :     UnixLabels.file_descr -> UnixLabels.socket_bool_option -> bool   val setsockopt :     UnixLabels.file_descr -> UnixLabels.socket_bool_option -> bool -> unit   val getsockopt_int :     UnixLabels.file_descr -> UnixLabels.socket_int_option -> int   val setsockopt_int :     UnixLabels.file_descr -> UnixLabels.socket_int_option -> int -> unit   val getsockopt_optint :     UnixLabels.file_descr -> UnixLabels.socket_optint_option -> int option   val setsockopt_optint :     UnixLabels.file_descr ->     UnixLabels.socket_optint_option -> int option -> unit   val getsockopt_float :     UnixLabels.file_descr -> UnixLabels.socket_float_option -> float   val setsockopt_float :     UnixLabels.file_descr -> UnixLabels.socket_float_option -> float -> unit   val getsockopt_error : UnixLabels.file_descr -> UnixLabels.error option   val open_connection :     UnixLabels.sockaddr -> Pervasives.in_channel * Pervasives.out_channel   val shutdown_connection : Pervasives.in_channel -> unit   val establish_server :     (Pervasives.in_channel -> Pervasives.out_channel -> unit) ->     addr:UnixLabels.sockaddr -> unit   type host_entry =     Unix.host_entry = {     h_name : string;     h_aliases : string array;     h_addrtype : UnixLabels.socket_domain;     h_addr_list : UnixLabels.inet_addr array;   }   type protocol_entry =     Unix.protocol_entry = {     p_name : string;     p_aliases : string array;     p_proto : int;   }   type service_entry =     Unix.service_entry = {     s_name : string;     s_aliases : string array;     s_port : int;     s_proto : string;   }   val gethostname : unit -> string   val gethostbyname : string -> UnixLabels.host_entry   val gethostbyaddr : UnixLabels.inet_addr -> UnixLabels.host_entry   val getprotobyname : string -> UnixLabels.protocol_entry   val getprotobynumber : int -> UnixLabels.protocol_entry   val getservbyname : string -> protocol:string -> UnixLabels.service_entry   val getservbyport : int -> protocol:string -> UnixLabels.service_entry   type addr_info = {     ai_family : UnixLabels.socket_domain;     ai_socktype : UnixLabels.socket_type;     ai_protocol : int;     ai_addr : UnixLabels.sockaddr;     ai_canonname : string;   }   type getaddrinfo_option =       AI_FAMILY of UnixLabels.socket_domain     | AI_SOCKTYPE of UnixLabels.socket_type     | AI_PROTOCOL of int     | AI_NUMERICHOST     | AI_CANONNAME     | AI_PASSIVE   val getaddrinfo :     string ->     string -> UnixLabels.getaddrinfo_option list -> UnixLabels.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 :     UnixLabels.sockaddr ->     UnixLabels.getnameinfo_option list -> UnixLabels.name_info   type terminal_io =     Unix.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 : UnixLabels.file_descr -> UnixLabels.terminal_io   type setattr_when = Unix.setattr_when = TCSANOW | TCSADRAIN | TCSAFLUSH   val tcsetattr :     UnixLabels.file_descr ->     mode:UnixLabels.setattr_when -> UnixLabels.terminal_io -> unit   val tcsendbreak : UnixLabels.file_descr -> duration:int -> unit   val tcdrain : UnixLabels.file_descr -> unit   type flush_queue = Unix.flush_queue = TCIFLUSH | TCOFLUSH | TCIOFLUSH   val tcflush : UnixLabels.file_descr -> mode:UnixLabels.flush_queue -> unit   type flow_action = Unix.flow_action = TCOOFF | TCOON | TCIOFF | TCION   val tcflow : UnixLabels.file_descr -> mode:UnixLabels.flow_action -> unit   val setsid : unit -> int end