sig
  type uv_open_flag =
    Fs_types.uv_open_flag =
      O_RDONLY
    | O_WRONLY
    | O_RDWR
    | O_NONBLOCK
    | O_CREAT
    | O_EXCL
    | O_TRUNC
    | O_APPEND
    | O_NOCTTY
    | O_DSYNC
    | O_SYNC
    | O_RSYNC
    | O_TEMPORARY
    | O_SHORT_LIVED
    | O_SEQUENTIAL
    | O_RANDOM
    | O_DIRECT
    | O_EXLOCK
    | O_NOATIME
    | O_SYMLINK
    | O_NOFOLLOW
    | O_DIRECTORY
  type file_kind =
    Fs_types.file_kind =
      S_REG
    | S_DIR
    | S_CHR
    | S_BLK
    | S_LNK
    | S_FIFO
    | S_SOCK
    | S_UNKNOWN
  type symlink_mode = Fs_types.symlink_mode = S_Default | S_Dir | S_Junction
  type access_permission =
    Fs_types.access_permission =
      Read
    | Write
    | Exec
    | Exists
  type stats =
    Fs_types.stats = {
    st_dev : int;
    st_kind : file_kind;
    st_perm : int;
    st_nlink : int;
    st_uid : int;
    st_gid : int;
    st_rdev : int;
    st_ino : int;
    st_size : int64;
    st_blksize : int;
    st_blocks : int;
    st_flags : int;
    st_gen : int;
    st_atime : int64;
    st_atime_nsec : int;
    st_mtime : int64;
    st_mtime_nsec : int;
    st_ctime : int64;
    st_ctime_nsec : int;
    st_birthtime : int64;
    st_birthtime_nsec : int;
  }
  type clone_mode = No_clone | Try_clone | Force_clone
  val openfile : ?perm:int -> mode:uv_open_flag list -> string -> file Lwt.t
  val read : ?pos:int -> ?len:int -> file -> buf:bytes -> int Lwt.t
  val read_ba : ?pos:int -> ?len:int -> file -> buf:buf -> int Lwt.t
  val pread :
    ?pos:int -> ?len:int -> file -> fd_offset:int64 -> buf:bytes -> int Lwt.t
  val pread_ba :
    ?pos:int -> ?len:int -> file -> fd_offset:int64 -> buf:buf -> int Lwt.t
  val write : ?pos:int -> ?len:int -> file -> buf:bytes -> int Lwt.t
  val write_string : ?pos:int -> ?len:int -> file -> buf:string -> int Lwt.t
  val write_ba : ?pos:int -> ?len:int -> file -> buf:buf -> int Lwt.t
  val pwrite :
    ?pos:int -> ?len:int -> file -> fd_offset:int64 -> buf:bytes -> int Lwt.t
  val pwrite_string :
    ?pos:int ->
    ?len:int -> file -> fd_offset:int64 -> buf:string -> int Lwt.t
  val pwrite_ba :
    ?pos:int -> ?len:int -> file -> fd_offset:int64 -> buf:buf -> int Lwt.t
  val writev : file -> Iovec_write.t list -> int Lwt.t
  val pwritev : file -> Iovec_write.t list -> int64 -> int Lwt.t
  val close : file -> unit Lwt.t
  val unlink : string -> unit Lwt.t
  val mkdir : ?perm:int -> string -> unit Lwt.t
  val rmdir : string -> unit Lwt.t
  val fsync : file -> unit Lwt.t
  val fdatasync : file -> unit Lwt.t
  val ftruncate : file -> len:int64 -> unit Lwt.t
  val stat : string -> stats Lwt.t
  val lstat : string -> stats Lwt.t
  val fstat : file -> stats Lwt.t
  val rename : src:string -> dst:string -> unit Lwt.t
  val link : target:string -> link_name:string -> unit Lwt.t
  val symlink :
    ?mode:symlink_mode -> src:string -> dst:string -> unit -> unit Lwt.t
  val mkdtemp : string -> string Lwt.t
  val sendfile :
    ?pos:int64 ->
    ?len:nativeint -> dst:file -> src:file -> unit -> nativeint Lwt.t
  val utime : string -> access:float -> modif:float -> unit Lwt.t
  val futime : file -> access:float -> modif:float -> unit Lwt.t
  val readlink : string -> string Lwt.t
  val access : string -> access_permission list -> unit Lwt.t
  val chmod : string -> perm:int -> unit Lwt.t
  val fchmod : file -> perm:int -> unit Lwt.t
  val chown : string -> uid:int -> gid:int -> unit Lwt.t
  val fchown : file -> uid:int -> gid:int -> unit Lwt.t
  val lchown : string -> uid:int -> gid:int -> unit Lwt.t
  val scandir : string -> (file_kind * string) array Lwt.t
  val realpath : string -> string Lwt.t
  val copyfile :
    ?excl:bool ->
    ?clone:clone_mode -> src:string -> dst:string -> unit -> unit Lwt.t
end