sig
  external unix_error : int -> string -> string -> 'a = "unix_error_stub"
  external exit_immediately : int -> 'a = "caml_sys_exit"
  val mknod :
    ?file_kind:Unix.file_kind ->
    ?perm:int -> ?major:int -> ?minor:int -> string -> unit
  module IOVec :
    sig
      type 'a t = private { buf : 'a; pos : int; len : int; }
      type 'a kind
      type bigstring =
          (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
          Bigarray.Array1.t
      val string_kind : string Unix_ext.IOVec.kind
      val bigstring_kind : Unix_ext.IOVec.bigstring Unix_ext.IOVec.kind
      val empty : 'Unix_ext.IOVec.kind -> 'Unix_ext.IOVec.t
      val of_string :
        ?pos:int -> ?len:int -> string -> string Unix_ext.IOVec.t
      val of_bigstring :
        ?pos:int ->
        ?len:int ->
        Unix_ext.IOVec.bigstring -> Unix_ext.IOVec.bigstring Unix_ext.IOVec.t
      val drop : 'Unix_ext.IOVec.t -> int -> 'Unix_ext.IOVec.t
      val max_iovecs : int
    end
  external int_of_file_descr : Unix.file_descr -> int = "%identity"
  external file_descr_of_int : int -> Unix.file_descr = "%identity"
  external dirfd : Unix.dir_handle -> Unix.file_descr = "unix_dirfd"
  external sync : unit -> unit = "unix_sync"
  external fsync : Unix.file_descr -> unit = "unix_fsync"
  external fdatasync : Unix.file_descr -> unit = "unix_fdatasync"
  external readdir_ino : Unix.dir_handle -> string * nativeint
    = "unix_readdir_ino_stub"
  val read_assume_fd_is_nonblocking :
    Unix.file_descr -> ?pos:int -> ?len:int -> string -> int
  val write_assume_fd_is_nonblocking :
    Unix.file_descr -> ?pos:int -> ?len:int -> string -> int
  val writev_assume_fd_is_nonblocking :
    Unix.file_descr -> ?count:int -> string Unix_ext.IOVec.t array -> int
  val writev :
    Unix.file_descr -> ?count:int -> string Unix_ext.IOVec.t array -> int
  external pselect :
    Unix.file_descr list ->
    Unix.file_descr list ->
    Unix.file_descr list ->
    float ->
    int list ->
    Unix.file_descr list * Unix.file_descr list * Unix.file_descr list
    = "unix_pselect_stub"
  module Clock :
    sig
      type t
      external get : Thread.t -> Unix_ext.Clock.t
        = "unix_pthread_getcpuclockid"
      external get_time : Unix_ext.Clock.t -> float = "unix_clock_gettime"
      external set_time : Unix_ext.Clock.t -> float -> unit
        = "unix_clock_settime"
      external get_resolution : Unix_ext.Clock.t -> float
        = "unix_clock_getres"
    end
  module RLimit :
    sig
      type limit = Limit of int64 | Infinity
      type t = { cur : Unix_ext.RLimit.limit; max : Unix_ext.RLimit.limit; }
      type resource = CORE | CPU | DATA | FSIZE | NOFILE | STACK | AS
      external get : Unix_ext.RLimit.resource -> Unix_ext.RLimit.t
        = "unix_getrlimit"
      external set : Unix_ext.RLimit.resource -> Unix_ext.RLimit.t -> unit
        = "unix_setrlimit"
    end
  module Resource_usage :
    sig
      type who = SELF | CHILDREN
      type t
      val get : Unix_ext.Resource_usage.who -> Unix_ext.Resource_usage.t
      val utime : Unix_ext.Resource_usage.t -> float
      val stime : Unix_ext.Resource_usage.t -> float
      val maxrss : Unix_ext.Resource_usage.t -> int64
      val ixrss : Unix_ext.Resource_usage.t -> int64
      val idrss : Unix_ext.Resource_usage.t -> int64
      val isrss : Unix_ext.Resource_usage.t -> int64
      val minflt : Unix_ext.Resource_usage.t -> int64
      val majflt : Unix_ext.Resource_usage.t -> int64
      val nswap : Unix_ext.Resource_usage.t -> int64
      val inblock : Unix_ext.Resource_usage.t -> int64
      val oublock : Unix_ext.Resource_usage.t -> int64
      val msgsnd : Unix_ext.Resource_usage.t -> int64
      val msgrcv : Unix_ext.Resource_usage.t -> int64
      val nsignals : Unix_ext.Resource_usage.t -> int64
      val nvcsw : Unix_ext.Resource_usage.t -> int64
      val nivcsw : Unix_ext.Resource_usage.t -> int64
      val add :
        Unix_ext.Resource_usage.t ->
        Unix_ext.Resource_usage.t -> Unix_ext.Resource_usage.t
    end
  type sysconf =
      ARG_MAX
    | CHILD_MAX
    | HOST_NAME_MAX
    | LOGIN_NAME_MAX
    | OPEN_MAX
    | PAGESIZE
    | RE_DUP_MAX
    | STREAM_MAX
    | SYMLOOP_MAX
    | TTY_NAME_MAX
    | TZNAME_MAX
    | POSIX_VERSION
    | PHYS_PAGES
    | AVPHYS_PAGES
    | IOV_MAX
  external sysconf : Unix_ext.sysconf -> int64 = "unix_sysconf"
  external mutex_timedlock : Mutex.t -> float -> bool
    = "unix_mutex_timedlock"
  external condition_timedwait : Condition.t -> Mutex.t -> float -> bool
    = "unix_condition_timedwait"
  external create_error_checking_mutex : unit -> Mutex.t
    = "unix_create_error_checking_mutex"
  external realpath : string -> string = "unix_realpath"
  external mkstemp : string -> string * Unix.file_descr = "unix_mkstemp"
  external mkdtemp : string -> string = "unix_mkdtemp"
  external abort : unit -> 'a = "unix_abort" "noalloc"
  external initgroups : string -> int -> unit = "unix_initgroups"
  module Fnmatch_flags :
    sig
      type t
      type flag =
          [ `CASEFOLD
          | `FILE_NAME
          | `LEADING_DIR
          | `NOESCAPE
          | `PATHNAME
          | `PERIOD ]
      val make : Unix_ext.Fnmatch_flags.flag list -> Unix_ext.Fnmatch_flags.t
    end
  val fnmatch :
    ?flags:Unix_ext.Fnmatch_flags.t -> pat:string -> string -> bool
  module Wordexp_flags :
    sig
      type t
      type flag = [ `NOCMD | `SHOWERR | `UNDEF ]
      val make : Unix_ext.Wordexp_flags.flag list -> Unix_ext.Wordexp_flags.t
    end
  val wordexp : ?flags:Unix_ext.Wordexp_flags.t -> string -> string array
  external if_indextoname : int -> string = "unix_if_indextoname"
  external mcast_join :
    ?ifname:string -> Unix.file_descr -> Unix.sockaddr -> unit
    = "unix_mcast_join"
  external mcast_leave :
    ?ifname:string -> Unix.file_descr -> Unix.sockaddr -> unit
    = "unix_mcast_leave"
end