.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;
.B ORCLOSE
says to remove the file when it is closed (by everyone who has a copy of the file descriptor);
and
.B OAPPEND
says to open the file in append-only mode, so that writes
are always appended to the end of the file.
.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 (9p).
.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 (9p)
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 \*9/src/lib9
.SH SEE ALSO
.IR intro (3),
.IR stat (3)
.SH DIAGNOSTICS
These functions set
.IR errstr .
.SH BUGS
Not all functionality is supported on all systems.
.PP
The
.B DMAPPEND
bit is not supported on any systems.
.PP
The implementation of
.B 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.
.PP
To avoid name conflicts with the underlying system,
.I open
and
.I create
are preprocessor macros defined as
.IR p9open
and
.IR p9create ;
see
.IR intro (3).
