OPEN(2)OPEN(2)NAME
open, create, close - open a file for reading or writing, create file
SYNOPSIS
#include <u.h>
#include <libc.h>
int open(char *file, int omode)
int create(char *file, int omode, ulong perm)
int close(int fd)
DESCRIPTION
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 pur‐
pose (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 actu‐
ally 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 con‐
taining directory; the permissions to perm ANDed with the permissions
of the containing directory. If the file already exists, it is trun‐
cated 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(5).
Create fails if the path up to the last element of file cannot be eval‐
uated, if the user doesn't have write permission in the final direc‐
tory, 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. If the
file is new and the directory in which it is created is a union direc‐
tory (see intro(2)) then the constituent directory where the file is
created depends on the structure of the union: see bind(2).
Since create may succeed even if the file exists, a special mechanism
is necessary for those applications that require an atomic create oper‐
ation. 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(5) 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.
SOURCE
/sys/src/libc/9syscall
SEE ALSOintro(2), bind(2), stat(2)DIAGNOSTICS
These functions set errstr.
OPEN(2)