open, create, close – open a file for reading or writing, create
int open(char *file, int omode)
int create(char *file, int omode, ulong perm)
int close(int fd)
Open opens the file for I/O and returns an associated file descriptor.
Omode is one of OREAD, OWRITE, ORDWR, or OEXEC, asking for permission
to read, write, read and write, or execute, respectively. In addition,
there are three values that can be ORed with the omode: OTRUNC
says to truncate the file to zero length before opening it; OCEXEC
close the file when an exec(3) or execl system call is made; ORCLOSE
says to remove the file when it is closed (by everyone who has
a copy of the file descriptor); and OAPPEND says to open the file
in append-only mode, so that writes are always appended to the
end of the file. Open fails if the file does not exist or the
user does not have permission to
open it for the requested purpose (see stat(3) for a description
of permissions). The user must have write permission on the file
if the OTRUNC bit is set. For the open system call (unlike the
implicit open in exec(3)), OEXEC is actually identical to OREAD.
Create creates a new file or prepares to rewrite an existing file,
opens it according to omode (as described for open), and returns
an associated file descriptor. If the file is new, the owner is
set to the userid of the creating process group; the group to
that of the containing directory; the permissions to perm ANDed
with the permissions of the containing
directory. If the file already exists, it is truncated to 0 length,
and the permissions, owner, and group remain unchanged. The created
file is a directory if the DMDIR bit is set in perm, an exclusive-use
file if the DMEXCL bit is set, and an append-only file if the
DMAPPEND bit is set. Exclusive-use files may be open for I/O by
only one client at a time, but the
file descriptor may become invalid if no I/O is done for an extended
period; see open(9p).
Create fails if the path up to the last element of file cannot
be evaluated, if the user doesn’t have write permission in the
final directory, if the file already exists and does not permit
the access defined by omode, of if there there are no free file
descriptors. In the last case, the file may be created even when
an error is returned.
Since create may succeed even if the file exists, a special mechanism
is necessary for those applications that require an atomic create
operation. If the OEXCL (0x1000) bit is set in the mode for a
create, the call succeeds only if the file does not already exist;
see open(9p) for details.
Close closes the file associated with a file descriptor. Provided
the file descriptor is a valid open descriptor, close is guaranteed
to close it; there will be no error. Files are closed automatically
upon termination of a process; close allows the file descriptor
to be reused.|
These functions set errstr.|
Not all functionality is supported on all systems.
The DMAPPEND bit is not supported on any systems.
The implementation of ORCLOSE is to unlink the file after opening
it, causing problems in programs that try to access the file by
name before it is closed.
To avoid name conflicts with the underlying system, open and create
are preprocessor macros defined as p9open and p9create; see intro(3).|