MEMFS(2)                                                 MEMFS(2)

     NAME
          memfs - heap based filesystem

     SYNOPSIS
          include "sys.m";
          include "memfs.m";
          memfs := load MemFS MemFS->PATH;

          init:    fn(): string;
          newfs:   fn(maxsz: int): ref Sys->FD;

     DESCRIPTION
          The MemFS module implements a Styx file server where all
          files and filesystem data structures are stored in the local
          heap, not on disk.

          init()
               The init function should be called once to initialise
               the internal state of MemFS.  Failure to initialise is
               reported by the returned string.  A return value of nil
               indicates success.

          newfs(maxsz)
               The newfs function takes a single argument, maxsz
               defining the maximum number of bytes of the new
               filesystem.  The return value is a file descriptor,
               serving Styx, suitable for passing to mount (see sys-
               bind(2)).

          Multiple filesystems of different sizes can be supported by
          a single instance of the module.  Each filesystem is con-
          strained by maxsz, any filesystem operations that cause the
          limit to be exceeded are failed with the error message:

               `filesystem full'

          File data is allocated in 512 byte blocks.  The actual
          filesystem data limit is always a multiple of this block
          size:

               actualmaxsz := (maxsz / 512) * 512;

     SOURCE
          /appl/lib/memfs.b

     CAVEATS
          Only file data blocks are considered in the determination of
          heap usage, the overhead of internal data structures cannot
          be accounted for.  MemFS could store its own data structures
          in data blocks, but this would impede performance.

     Page 1                       Plan 9            (printed 12/30/24)

     MEMFS(2)                                                 MEMFS(2)

          Newly created and empty files are pre-allocated a data block
          in an attempt to prevent directory entries from using heap
          without regard to the requested maxsz.

     SEE ALSO
          styxlib(2), memfs(4)

     Page 2                       Plan 9            (printed 12/30/24)