type extension = {
extension : string;(*

9P2000.u: extra information about links, pipes

*)
n_uid : int32;(*

9P2000.u: numeric id of the user who owns the file

*)
n_gid : int32;(*

9P2000.u: numeric id of the group of the file

*)
n_muid : int32;(*

9P2000.u: numeric id of the user who last modified the file

*)
}
val extension_of_sexp : Sexplib.Sexp.t -> extension
val sexp_of_extension : extension -> Sexplib.Sexp.t
val make_extension : ?extension:string -> ?n_uid:int32 -> ?n_gid:int32 -> ?n_muid:int32 -> unit -> extension
type t = {
ty : int;(*

for kernel use

*)
dev : int32;(*

for kernel use

*)
qid : Qid.t;
mode : FileMode.t;(*

permissions and flags

*)
atime : int32;(*

last access time

*)
mtime : int32;(*

last modification time

*)
length : int64;(*

length of the file in bytes

*)
name : string;(*

file name. Must be '/' if the file is the root

*)
uid : string;(*

owner name

*)
gid : string;(*

group name

*)
muid : string;(*

name of last user who modified the file

*)
u : extension option;(*

9P2000.u extensions

*)
}
val t_of_sexp : Sexplib.Sexp.t -> t
val sexp_of_t : t -> Sexplib.Sexp.t
val make : name:string -> qid:Qid.t -> ?mode:FileMode.t -> ?length:int64 -> ?atime:int32 -> ?mtime:int32 -> ?uid:string -> ?gid:string -> ?muid:string -> ?u:extension -> unit -> t
val sizeof : t -> int

The size of a buffer needed to hold t

val read : Cstruct.t -> ( t * Cstruct.t, [ `Msg of string ] ) Result.result

Read a t from the given buffer and return it, along with the unused remainder of the buffer. If the buffer cannot be parsed then return an error.

val write : t -> Cstruct.t -> ( Cstruct.t, [ `Msg of string ] ) Result.result

Write a t into the given buffer. If the buffer is too small, then return an error. Return the unused remainder of the buffer.