unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (plan9)
Page:
Section:
Apropos / Subsearch:
optional field

OPEN(5)                       File Formats Manual                      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  permissions  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  file  is  append-only,  and  permission is
       granted, the open succeeds but the file will not be truncated); 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
       directory.   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; sub-
       sequent  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 file  is  returned  with  the
       create reply message.

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

       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, the create system call (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, success-
       ful 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.



                                                                       OPEN(5)