sig
  external unix_error : int -> string -> string -> 'a = "unix_error_stub"
  val mknod :
    ?file_kind:Unix.file_kind ->
    ?perm:int -> ?major:int -> ?minor:int -> string -> unit
  module IOVec :
    sig
      type 'a t =
        'Unix_ext.IOVec.t = private {
        buf : 'a;
        pos : int;
        len : int;
      }
      type 'a kind = 'Unix_ext.IOVec.kind
      type bigstring =
          (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
          Bigarray.Array1.t
      val string_kind : string kind
      val bigstring_kind : bigstring kind
      val empty : 'a kind -> 'a t
      val of_string : ?pos:int -> ?len:int -> string -> string t
      val of_bigstring : ?pos:int -> ?len:int -> bigstring -> bigstring t
      val drop : 'a t -> int -> 'a 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 * int
    = "unix_readdir_ino_stub"
  val read_assume_nonblocking :
    Unix.file_descr -> ?pos:int -> ?len:int -> string -> int
  val write_assume_nonblocking :
    Unix.file_descr -> ?pos:int -> ?len:int -> string -> int
  val writev_assume_nonblocking :
    Unix.file_descr -> ?count:int -> string 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"
  type clock = Unix_ext.clock
  external clock_gettime : clock -> float = "unix_clock_gettime"
  external clock_settime : clock -> float -> unit = "unix_clock_settime"
  external clock_getres : clock -> float = "unix_clock_getres"
  external pthread_getcpuclockid : Thread.t -> clock
    = "unix_pthread_getcpuclockid"
  module RLimit :
    sig
      type limit = Unix_ext.RLimit.limit = Limit of int64 | Infinity
      type t = Unix_ext.RLimit.t = { cur : limit; max : limit; }
      type resource =
        Unix_ext.RLimit.resource =
          CORE
        | CPU
        | DATA
        | FSIZE
        | NOFILE
        | STACK
        | AS
    end
  external getrlimit : RLimit.resource -> RLimit.t = "unix_getrlimit"
  external setrlimit : RLimit.resource -> RLimit.t -> unit = "unix_setrlimit"
  module RUsage :
    sig
      type who = Unix_ext.RUsage.who = SELF | CHILDREN
      type t =
        Unix_ext.RUsage.t = {
        ru_utime : float;
        ru_stime : float;
        ru_maxrss : int64;
        ru_ixrss : int64;
        ru_idrss : int64;
        ru_isrss : int64;
        ru_minflt : int64;
        ru_majflt : int64;
        ru_nswap : int64;
        ru_inblock : int64;
        ru_oublock : int64;
        ru_msgsnd : int64;
        ru_msgrcv : int64;
        ru_nsignals : int64;
        ru_nvcsw : int64;
        ru_nivcsw : int64;
      }
      val ru_utime : t -> float
      val ru_stime : t -> float
      val ru_maxrss : t -> int64
      val ru_ixrss : t -> int64
      val ru_idrss : t -> int64
      val ru_isrss : t -> int64
      val ru_minflt : t -> int64
      val ru_majflt : t -> int64
      val ru_nswap : t -> int64
      val ru_inblock : t -> int64
      val ru_oublock : t -> int64
      val ru_msgsnd : t -> int64
      val ru_msgrcv : t -> int64
      val ru_nsignals : t -> int64
      val ru_nvcsw : t -> int64
      val ru_nivcsw : t -> int64
      val add : t -> t -> t
    end
  external getrusage : RUsage.who -> RUsage.t = "unix_getrusage"
  type sysconf =
    Unix_ext.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 : 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 realpath : string -> string = "unix_realpath"
  external mkdtemp : string -> string = "unix_mkdtemp"
  external abort : unit -> 'a = "unix_abort" "noalloc"
  external initgroups : string -> int -> unit = "unix_initgroups"
end