378 lines
11 KiB
Groff
378 lines
11 KiB
Groff
|
.\" $NetBSD: open.2,v 1.47 2010/09/22 17:58:09 wiz Exp $
|
||
|
.\"
|
||
|
.\" Copyright (c) 1980, 1991, 1993
|
||
|
.\" The Regents of the University of California. All rights reserved.
|
||
|
.\"
|
||
|
.\" Redistribution and use in source and binary forms, with or without
|
||
|
.\" modification, are permitted provided that the following conditions
|
||
|
.\" are met:
|
||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||
|
.\" notice, this list of conditions and the following disclaimer.
|
||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||
|
.\" documentation and/or other materials provided with the distribution.
|
||
|
.\" 3. Neither the name of the University nor the names of its contributors
|
||
|
.\" may be used to endorse or promote products derived from this software
|
||
|
.\" without specific prior written permission.
|
||
|
.\"
|
||
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
|
.\" SUCH DAMAGE.
|
||
|
.\"
|
||
|
.\" @(#)open.2 8.2 (Berkeley) 11/16/93
|
||
|
.\"
|
||
|
.Dd September 22, 2010
|
||
|
.Dt OPEN 2
|
||
|
.Os
|
||
|
.Sh NAME
|
||
|
.Nm open
|
||
|
.Nd open or create a file for reading or writing
|
||
|
.Sh LIBRARY
|
||
|
.Lb libc
|
||
|
.Sh SYNOPSIS
|
||
|
.In fcntl.h
|
||
|
.Ft int
|
||
|
.Fn open "const char *path" "int flags" "mode_t mode"
|
||
|
.Sh DESCRIPTION
|
||
|
The file name specified by
|
||
|
.Fa path
|
||
|
is opened
|
||
|
for reading and/or writing as specified by the
|
||
|
argument
|
||
|
.Fa flags
|
||
|
and the file descriptor returned to the calling process.
|
||
|
The
|
||
|
.Fa flags
|
||
|
are specified by
|
||
|
.Em or Ns 'ing
|
||
|
the values listed below.
|
||
|
Applications must specify exactly one of the first three values
|
||
|
(file access methods):
|
||
|
.Bl -tag -offset indent -width O_NONBLOCK
|
||
|
.It Dv O_RDONLY
|
||
|
Open for reading only.
|
||
|
.It Dv O_WRONLY
|
||
|
Open for writing only.
|
||
|
.It Dv O_RDWR
|
||
|
Open for reading and writing.
|
||
|
.El
|
||
|
.Pp
|
||
|
Any combination of the following may be used:
|
||
|
.Bl -tag -offset indent -width O_NONBLOCK
|
||
|
.It Dv O_NONBLOCK
|
||
|
Do not block on open or for data to become available.
|
||
|
.It Dv O_APPEND
|
||
|
Append to the file on each write.
|
||
|
.It Dv O_CREAT
|
||
|
Create the file if it does not exist, in which case the file is
|
||
|
created with mode
|
||
|
.Ar mode
|
||
|
as described in
|
||
|
.Xr chmod 2
|
||
|
and modified by the process' umask value (see
|
||
|
.Xr umask 2 ) .
|
||
|
.It Dv O_TRUNC
|
||
|
Truncate size to 0.
|
||
|
.It Dv O_EXCL
|
||
|
Error if
|
||
|
.Dv O_CREAT
|
||
|
and the file already exists.
|
||
|
.It Dv O_SHLOCK
|
||
|
Atomically obtain a shared lock.
|
||
|
.It Dv O_EXLOCK
|
||
|
Atomically obtain an exclusive lock.
|
||
|
.It Dv O_NOFOLLOW
|
||
|
If last path element is a symlink, don't follow it.
|
||
|
This option is provided for compatibility with other operating
|
||
|
systems, but its security value is questionable.
|
||
|
.It Dv O_DSYNC
|
||
|
If set, write operations will be performed according to synchronized
|
||
|
I/O data integrity completion:
|
||
|
each write will wait for the file data to be committed to stable
|
||
|
storage.
|
||
|
.It Dv O_SYNC
|
||
|
If set, write operations will be performed according to synchronized
|
||
|
I/O file integrity completion:
|
||
|
each write will wait for both the file data and file status to be
|
||
|
committed to stable storage.
|
||
|
.It Dv O_RSYNC
|
||
|
If set, read operations will complete at the same level of
|
||
|
integrity which is in effect for write operations:
|
||
|
if specified together with
|
||
|
.Dv O_SYNC ,
|
||
|
each read will wait for the file status to be committed to stable
|
||
|
storage.
|
||
|
.Pp
|
||
|
Combining
|
||
|
.Dv O_RSYNC
|
||
|
with
|
||
|
.Dv O_DSYNC
|
||
|
only, or specifying it without any other synchronized I/O integrity
|
||
|
completion flag set, has no further effect.
|
||
|
.It Dv O_ALT_IO
|
||
|
Alternate I/O semantics will be used for read and write operations
|
||
|
on the file descriptor.
|
||
|
Alternate semantics are defined by the underlying layers and will not
|
||
|
have any alternate effect in most cases.
|
||
|
.It Dv O_NOCTTY
|
||
|
If the file is a terminal device, the opened device is not
|
||
|
made the controlling terminal for the session.
|
||
|
This flag has no effect on
|
||
|
.Nx ,
|
||
|
since the system defaults to the abovementioned behaviour.
|
||
|
The flag is present only for standards conformance.
|
||
|
.It Dv O_DIRECT
|
||
|
If set on a regular file, data I/O operations will not buffer the data
|
||
|
being transferred in the kernel's cache, but rather transfer the data
|
||
|
directly between user memory and the underlying device driver if possible.
|
||
|
This flag is advisory; the request may be performed in the normal
|
||
|
buffered fashion if certain conditions are not met, e.g. if the request
|
||
|
is not sufficiently aligned or if the file is mapped.
|
||
|
.Pp
|
||
|
To meet the alignment requirements for direct I/O, the file offset,
|
||
|
the length of the I/O and the address of the buffer in memory must all
|
||
|
be multiples of
|
||
|
.Dv DEV_BSIZE
|
||
|
(512 bytes).
|
||
|
If the I/O request is made
|
||
|
using an interface that supports scatter/gather via struct iovec, each
|
||
|
element of the request must meet the above alignment constraints.
|
||
|
.It Dv O_DIRECTORY
|
||
|
Fail if the file is not a directory.
|
||
|
.El
|
||
|
.Pp
|
||
|
Opening a file with
|
||
|
.Dv O_APPEND
|
||
|
set causes each write on the file
|
||
|
to be appended to the end.
|
||
|
If
|
||
|
.Dv O_TRUNC
|
||
|
is specified and the
|
||
|
file exists, the file is truncated to zero length.
|
||
|
.Pp
|
||
|
If
|
||
|
.Dv O_EXCL
|
||
|
is set with
|
||
|
.Dv O_CREAT
|
||
|
and the file already
|
||
|
exists,
|
||
|
.Fn open
|
||
|
returns an error.
|
||
|
This may be used to implement a simple exclusive access locking mechanism.
|
||
|
If
|
||
|
.Dv O_EXCL
|
||
|
is set and the last component of the pathname is
|
||
|
a symbolic link,
|
||
|
.Fn open
|
||
|
will fail even if the symbolic
|
||
|
link points to a non-existent name.
|
||
|
.Pp
|
||
|
If the
|
||
|
.Dv O_NONBLOCK
|
||
|
flag is specified, do not wait for the device or file to be ready or
|
||
|
available.
|
||
|
If the
|
||
|
.Fn open
|
||
|
call would result
|
||
|
in the process being blocked for some reason (e.g., waiting for
|
||
|
carrier on a dialup line),
|
||
|
.Fn open
|
||
|
returns immediately.
|
||
|
This flag also has the effect of making all subsequent I/O on the open file non-blocking.
|
||
|
.Pp
|
||
|
When opening a file, a lock with
|
||
|
.Xr flock 2
|
||
|
semantics can be obtained by setting
|
||
|
.Dv O_SHLOCK
|
||
|
for a shared lock, or
|
||
|
.Dv O_EXLOCK
|
||
|
for an exclusive lock.
|
||
|
If creating a file with
|
||
|
.Dv O_CREAT ,
|
||
|
the request for the lock will never fail
|
||
|
(provided that the underlying filesystem supports locking).
|
||
|
.Pp
|
||
|
If
|
||
|
.Fn open
|
||
|
is successful, the file pointer used to mark the current position within
|
||
|
the file is set to the beginning of the file.
|
||
|
.Pp
|
||
|
When a new file is created it is given the group of the directory
|
||
|
which contains it.
|
||
|
.Pp
|
||
|
The new descriptor is set to remain open across
|
||
|
.Xr execve 2
|
||
|
system calls; see
|
||
|
.Xr close 2
|
||
|
and
|
||
|
.Xr fcntl 2 .
|
||
|
.Pp
|
||
|
The system imposes a limit on the number of file descriptors
|
||
|
open simultaneously by one process.
|
||
|
Calling
|
||
|
.Xr getdtablesize 3
|
||
|
returns the current system limit.
|
||
|
.Sh RETURN VALUES
|
||
|
If successful,
|
||
|
.Fn open
|
||
|
returns a non-negative integer, termed a file descriptor.
|
||
|
Otherwise, a value of \-1 is returned and
|
||
|
.Va errno
|
||
|
is set to indicate the error.
|
||
|
.Sh ERRORS
|
||
|
The named file is opened unless:
|
||
|
.Bl -tag -width Er
|
||
|
.It Bq Er EACCES
|
||
|
Search permission is denied for a component of the path prefix,
|
||
|
the required permissions (for reading and/or writing)
|
||
|
are denied for the given flags, or
|
||
|
.Dv O_CREAT
|
||
|
is specified,
|
||
|
the file does not exist,
|
||
|
and the directory in which it is to be created
|
||
|
does not permit writing.
|
||
|
.It Bq Er EDQUOT
|
||
|
.Dv O_CREAT
|
||
|
is specified,
|
||
|
the file does not exist,
|
||
|
and the directory in which the entry for the new file
|
||
|
is being placed cannot be extended because the
|
||
|
user's quota of disk blocks on the file system
|
||
|
containing the directory has been exhausted; or
|
||
|
.Dv O_CREAT
|
||
|
is specified,
|
||
|
the file does not exist,
|
||
|
and the user's quota of inodes on the file system on
|
||
|
which the file is being created has been exhausted.
|
||
|
.It Bq Er EEXIST
|
||
|
.Dv O_CREAT
|
||
|
and
|
||
|
.Dv O_EXCL
|
||
|
were specified and the file exists.
|
||
|
.It Bq Er EFAULT
|
||
|
.Fa path
|
||
|
points outside the process's allocated address space.
|
||
|
.It Bq Er EFTYPE
|
||
|
.Dv O_NOFOLLOW
|
||
|
was specified, but the last path component is a symlink.
|
||
|
.Em Note :
|
||
|
.St -p1003.1-2008
|
||
|
specifies returning
|
||
|
.Bq Er ELOOP
|
||
|
for this case.
|
||
|
.It Bq Er EINTR
|
||
|
The
|
||
|
.Fn open
|
||
|
operation was interrupted by a signal.
|
||
|
.It Bq Er EIO
|
||
|
An I/O error occurred while making the directory entry or
|
||
|
allocating the inode for
|
||
|
.Dv O_CREAT .
|
||
|
.It Bq Er EISDIR
|
||
|
The named file is a directory, and the arguments specify
|
||
|
it is to be opened for writing.
|
||
|
.It Bq Er ELOOP
|
||
|
Too many symbolic links were encountered in translating the pathname.
|
||
|
.It Bq Er EMFILE
|
||
|
The process has already reached its limit for open file descriptors.
|
||
|
.It Bq Er ENAMETOOLONG
|
||
|
A component of a pathname exceeded
|
||
|
.Brq Dv NAME_MAX
|
||
|
characters, or an entire path name exceeded
|
||
|
.Brq Dv PATH_MAX
|
||
|
characters.
|
||
|
.It Bq Er ENFILE
|
||
|
The system file table is full.
|
||
|
.It Bq Er ENOENT
|
||
|
.Dv O_CREAT
|
||
|
is not set and the named file does not exist, or
|
||
|
a component of the path name that must exist does not exist.
|
||
|
.It Bq Er ENOSPC
|
||
|
.Dv O_CREAT
|
||
|
is specified,
|
||
|
the file does not exist,
|
||
|
and the directory in which the entry for the new file is being placed
|
||
|
cannot be extended because there is no space left on the file
|
||
|
system containing the directory; or
|
||
|
.Dv O_CREAT
|
||
|
is specified,
|
||
|
the file does not exist,
|
||
|
and there are no free inodes on the file system on which the
|
||
|
file is being created.
|
||
|
.It Bq Er ENOTDIR
|
||
|
A component of the path prefix is not a directory; or
|
||
|
.Dv O_DIRECTORY
|
||
|
is specified and the last path component is not a directory.
|
||
|
.It Bq Er ENXIO
|
||
|
The named file is a character special or block
|
||
|
special file, and the device associated with this special file
|
||
|
does not exist, or
|
||
|
the named file is a
|
||
|
.Tn FIFO ,
|
||
|
.Dv O_NONBLOCK
|
||
|
and
|
||
|
.Dv O_WRONLY
|
||
|
is set and no process has the file open for reading.
|
||
|
.It Bq Er EOPNOTSUPP
|
||
|
.Dv O_SHLOCK
|
||
|
or
|
||
|
.Dv O_EXLOCK
|
||
|
is specified but the underlying filesystem does not support locking; or
|
||
|
an attempt was made to open a socket (not currently implemented).
|
||
|
.It Bq Er EPERM
|
||
|
The file's flags (see
|
||
|
.Xr chflags 2 )
|
||
|
don't allow the file to be opened.
|
||
|
.It Bq Er EROFS
|
||
|
The named file resides on a read-only file system,
|
||
|
and the file is to be modified.
|
||
|
.It Bq Er ETXTBSY
|
||
|
The file is a pure procedure (shared text) file that is being
|
||
|
executed and the
|
||
|
.Fn open
|
||
|
call requests write access.
|
||
|
.El
|
||
|
.Sh SEE ALSO
|
||
|
.Xr chmod 2 ,
|
||
|
.Xr close 2 ,
|
||
|
.Xr dup 2 ,
|
||
|
.Xr lseek 2 ,
|
||
|
.Xr read 2 ,
|
||
|
.Xr umask 2 ,
|
||
|
.Xr write 2 ,
|
||
|
.Xr getdtablesize 3
|
||
|
.Sh STANDARDS
|
||
|
The
|
||
|
.Fn open
|
||
|
function conforms to
|
||
|
.St -p1003.1-90 .
|
||
|
The
|
||
|
.Fa flags
|
||
|
values
|
||
|
.Dv O_DSYNC ,
|
||
|
.Dv O_SYNC
|
||
|
and
|
||
|
.Dv O_RSYNC
|
||
|
are extensions defined in
|
||
|
.St -p1003.1b-93 .
|
||
|
.Pp
|
||
|
The
|
||
|
.Dv O_SHLOCK
|
||
|
and
|
||
|
.Dv O_EXLOCK
|
||
|
flags are non-standard extensions and should not be used if portability
|
||
|
is of concern.
|
||
|
.Sh HISTORY
|
||
|
An
|
||
|
.Fn open
|
||
|
function call appeared in
|
||
|
.At v2 .
|