2011-03-30 13:49:47 +00:00
|
|
|
.TH OPEN 2
|
|
|
|
.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 (2)
|
|
|
|
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 (2)
|
|
|
|
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 (2)),
|
|
|
|
.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 ,
|
2015-07-02 01:46:47 +00:00
|
|
|
or if there are no free file descriptors.
|
2011-03-30 13:49:47 +00:00
|
|
|
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 (2))
|
|
|
|
then the constituent directory where the file is created
|
|
|
|
depends on the structure of the union: see
|
|
|
|
.IR bind (2).
|
|
|
|
.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 /sys/src/libc/9syscall
|
|
|
|
.SH SEE ALSO
|
|
|
|
.IR intro (2),
|
|
|
|
.IR bind (2),
|
|
|
|
.IR stat (2)
|
|
|
|
.SH DIAGNOSTICS
|
|
|
|
These functions set
|
|
|
|
.IR errstr .
|