SYS-EXPORT(2)                                       SYS-EXPORT(2)

     NAME
          export - export a name space

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

          export:   fn(fd: ref FD, dir: string, flag: int):   int;

     DESCRIPTION
          Export receives and replies to 9P requests from a client on
          a connection represented by fd, for file operations on the
          part of the current file name space rooted at dir, which is
          thus exported.  This is the server end of the client's mount
          call.  Names presented by the client are interpreted rela-
          tive to directory dir, which can be adjusted using sys-
          pctl(2) and sys-bind(2) before export.  The file descriptor
          fd must be open for reading and writing, and neither mounted
          elsewhere nor already exported.

          Commonly, export's first argument is a file descriptor open
          on the data file in the dir of a Connection returned by
          listen (see dial(2)). Before calling export, the connection
          on fd can optionally be authenticated and set for encryption
          or digesting using the functions in security-auth(2).

          The export function takes two mutually exclusive flags:

          Sys->EXPWAIT
               Export blocks until all client requests are complete.

          Sys->EXPASYNC
               Client requests are handled by a background (kernel)
               process.  Export returns immediately.  The serving pro-
               cess terminates when the client hangs up.

     EXAMPLES
          Export a given directory on fd, protecting it from subse-
          quent changes:

               exportdir(fd: ref Sys->FD, dir: string, pid: chan of int)
               {
                    pid <-= sys->pctl(Sys->FORKNS|Sys->FORKENV|Sys->NEWFD, fd.fd :: nil);
                    sys->export(fd, dir, Sys->EXPWAIT);
               }

          The FORKNS given to pctl forks the name space, and prevents
          the sys->export from seeing the effects of subsequent mounts
          by the process that calls or spawns exportdir.  The
          exportdir function above might be called using:

     Page 1                       Plan 9             (printed 3/29/24)

     SYS-EXPORT(2)                                       SYS-EXPORT(2)

               pid := chan of int;
               spawn exportdir(fd, "/", pid);
               expid := <-pid;

          Service will stop automatically when the connection fd
          returns end-of-file (eg, when it hangs up), but it can also
          be stopped locally by killing expid.

     SOURCE
          /emu/port/inferno.c
          /emu/port/exportfs.c
          /os/port/inferno.c
          /os/port/exportfs.c

     DIAGNOSTICS
          Export returns a non-negative value on success and -1 on
          error; the system error string is set.

     Page 2                       Plan 9             (printed 3/29/24)