term% cat index.txt 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 ac‐
cess, 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 per‐
mission (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 direc‐
tory. If other bits are set in mode they will be ignored. It is ille‐
gal 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 im‐
plied 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)