.TH OPEN 3
.SH NAME
open, create, close \- open a file for reading or writing, create file
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.B
int open(char *file, int omode)
.PP
.B
int create(char *file, int omode, ulong perm)
.PP
.B
int close(int fd)
.SH DESCRIPTION
.I Open
opens the
.I file
for I/O and returns an associated file descriptor.
.I Omode
is one of
.BR OREAD ,
.BR OWRITE ,
.BR ORDWR ,
or
.BR 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
.IR omode :
.B OTRUNC
says to truncate the file
to zero length before opening it;
.B OCEXEC
says to close the file when an
.IR exec (3)
or
.I execl
system call is made;
and
.B ORCLOSE
says to remove the file when it is closed (by everyone who has a copy of the file descriptor).
.I Open
fails if the file does not exist or the user does not have
permission to open it for the requested purpose
(see
.IR stat (3)
for a description of permissions).
The user must have write permission on the
.I file
if the
.B OTRUNC
bit is set.
For the
.I open
system call
(unlike the implicit
.I open
in
.IR exec (3)),
.B OEXEC
is actually identical to
.BR OREAD .
.PP
.I Create
creates a new
.I file
or prepares to rewrite an existing
.IR file ,
opens it according to
.I omode
(as described for
.IR 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
.I 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
.B DMDIR
bit is set in
.IR perm ,
an exclusive-use file if the
.B DMEXCL
bit is set, and an append-only file if the
.B 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
.IR open (5).
.PP
.I Create
fails if the path up to the last element of
.I 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
.IR 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 directory (see
.IR intro (3))
then the constituent directory where the file is created
depends on the structure of the union: see
.IR bind (3).
.PP
Since
.I create
may succeed even if the file exists, a special mechanism is necessary
for those applications that require an atomic create operation.
If the
.B OEXCL
.RB ( 0x1000 )
bit is set in the
.I mode
for a
.IR create,
the call succeeds only if the file does not already exist;
see
.IR open (5)
for details.
.PP
.I Close
closes the file associated with a file descriptor.
Provided the file descriptor is a valid open descriptor,
.I close
is guaranteed to close it; there will be no error.
Files are closed automatically upon termination of a process;
.I close
allows the file descriptor to be reused.
.SH SOURCE
.B /usr/local/plan9/src/libc/9syscall
.SH SEE ALSO
.IR intro (3),
.IR bind (3),
.IR stat (3)
.SH DIAGNOSTICS
These functions set
.IR errstr .
