    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
        | 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 getenv : string -> string
      val putenv : string -> string -> unit
      type process_status = WEXITED of int | WSIGNALED of int | WSTOPPED of int
      and wait_flag = WNOHANG | WUNTRACED
      val execv : string -> string array -> unit
      val execve : string -> string array -> string array -> unit
      val execvp : string -> string array -> unit
      val execvpe : string -> string array -> string array -> unit
      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
      and 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 -> string -> int -> int -> int
      val write : 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
      and 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 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 : string -> string -> unit
      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;
      }
      and 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 times : unit -> Unix.process_times
      val utimes : string -> float -> float -> unit
      type interval_timer = ITIMER_REAL | ITIMER_VIRTUAL | ITIMER_PROF
      and 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
      type passwd_entry = {
        pw_name : string;
        pw_passwd : string;
        pw_uid : int;
        pw_gid : int;
        pw_gecos : string;
        pw_dir : string;
        pw_shell : string;
      }
      and 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
      type socket_domain = PF_UNIX | PF_INET
      and socket_type = SOCK_STREAM | SOCK_DGRAM | SOCK_RAW | SOCK_SEQPACKET
      and 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 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 -> string -> int -> int -> Unix.msg_flag list -> int
      val recvfrom :
        Unix.file_descr ->
        string -> int -> int -> Unix.msg_flag list -> int * Unix.sockaddr
      val send :
        Unix.file_descr -> string -> int -> int -> Unix.msg_flag list -> int
      val sendto :
        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
      and socket_int_option =
          SO_SNDBUF
        | SO_RCVBUF
        | SO_ERROR
        | SO_TYPE
        | SO_RCVLOWAT
        | SO_SNDLOWAT
      and socket_optint_option = SO_LINGER
      and 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
      external getsockopt_int : Unix.file_descr -> Unix.socket_int_option -> int
        = "unix_getsockopt_int"
      external setsockopt_int :
        Unix.file_descr -> Unix.socket_int_option -> int -> unit
        = "unix_setsockopt_int"
      external getsockopt_optint :
        Unix.file_descr -> Unix.socket_optint_option -> int option
        = "unix_getsockopt_optint"
      external setsockopt_optint :
        Unix.file_descr -> Unix.socket_optint_option -> int option -> unit
        = "unix_setsockopt_optint"
      external getsockopt_float :
        Unix.file_descr -> Unix.socket_float_option -> float
        = "unix_getsockopt_float"
      external setsockopt_float :
        Unix.file_descr -> Unix.socket_float_option -> float -> unit
        = "unix_setsockopt_float"
      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;
      }
      and protocol_entry = {
        p_name : string;
        p_aliases : string array;
        p_proto : int;
      }
      and 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 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