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 every-
one 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 per-
mission 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 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 can-
not be evaluated, if the user doesn't have write permission
in the final directory, if the file already exists and does
Page 1 Plan 9 (printed 10/25/25)
OPEN(2) OPEN(2)
not permit the access defined by omode, or if 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 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(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 pro-
cess; close allows the file descriptor to be reused.
SOURCE
/sys/src/libc/9syscall
SEE ALSO
intro(2), bind(2), stat(2)
DIAGNOSTICS
These functions set errstr.
Page 2 Plan 9 (printed 10/25/25)