OPEN(5)                                                   OPEN(5)

     NAME
          open, create - prepare a fid for I/O on an existing or new
          file

     SYNOPSIS
          Topen    tag[2] fid[2] mode[1]
          Ropen    tag[2] fid[2] qid[8]

          Tcreate  tag[2] fid[2] name[28] perm[4] mode[1]
          Rcreate  tag[2] fid[2] qid[8]

     DESCRIPTION
          The open request asks the file server to check permissions
          and prepare a fid for I/O with subsequent read and write
          messages.  The mode field determines the type of I/O: 0, 1,
          2, and 3 mean read access, write access, read and write
          access, and execute access, to be checked against the per-
          missions for the file.  In addition, if mode has the OTRUNC
          (0x10) bit set, the file is to be truncated, which requires
          write permission; if the mode has the ORCLOSE (0x40) bit
          set, the file is to be removed when the fid is clunked,
          which requires permission to remove the file from its direc-
          tory.  If other bits are set in mode they will be ignored.
          It is illegal to write a directory, truncate it, or attempt
          to remove it on close.  If the file is marked for exclusive
          use (see stat(5)), only one client can have the file open at
          any time.  That is, after such a file has been opened, no
          other open will succeed until fid has been clunked.  All
          these permissions are checked at the time of the open
          request; subsequent changes to the permissions of files do
          not affect the ability to read, write, or remove an open
          file.

          The create request asks the file server to create a new file
          with the name supplied, in the directory (dir) represented
          by fid, and requires write permission in the directory.  The
          owner of the file is the implied user id of the request, the
          group of the file is the same as dir, and the permissions
          are the value of
                (perm&(~0777|0111)) | (dir.perm&perm&0666)
          if a regular file is being created and
                    (perm&~0777) | (dir.perm&perm&0777)
          if a directory is being created.  This means, for example,
          that if the create allows read permission to others, but the
          containing directory does not, then the created file will
          not allow others to read the file.

          Finally, the newly created file is opened according to mode,
          and fid will represent the newly opened file.  Mode is not
          checked against the permissions in perm. The qid for the new

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

     OPEN(5)                                                   OPEN(5)

          file is returned with the create response.

          Directories are created by setting the CHDIR bit
          (0x80000000) in the mode.

          The names . and .. are special; it is illegal to create
          files with these names.

          It is an error for either of these messages if the fid is
          already the product of a successful open or create message.

          An attempt to create a file in a directory where the given
          name already exists will be rejected; in this case, create
          (see open(2)) uses open with truncation.  The algorithm used
          by create is: first walk to the directory to contain the
          file.  If that fails, return an error.  Next walk to the
          specified file.  If the walk succeeds, send a request to
          open and truncate the file and return the result, successful
          or not.  If the walk fails, send a create message.  If that
          fails, it may be because the file was created by another
          process after the previous walk failed, so (once) try the
          walk and open again.  For the behavior of create on a union
          directory, see bind(2).

     ENTRY POINTS
          Open and create both generate open messages; only create
          generates a create message.

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