open, create, close - open a file for reading or writing, create file
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 says to
close the file when an exec(2) or execl system call is made; and ORCLOSE says to remove
the file when it is closed (by everyone who has a copy of the file descriptor). Open
fails if the file does not exist or the user does not have permission to open it for the
requested purpose (see stat(2) 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(2)), 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 con-
taining directory. If the file already exists, it is truncated to 0 length, and the per-
missions, owner, and group remain unchanged. The created file is a directory if the CHDIR
bit is set in omode. It is an exclusive-use file if the CHEXCL bit is set. Such 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(5).
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, or if the file already exists and
does not permit the access defined by omode. If the file is new and the directory in
which it is created is a union directory (see intro(2)) then the constituent directory
where the file is created depends on the structure of the union: see bind(2).
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.
intro(2), bind(2), stat(2)
These functions set errstr.