504 lines
14 KiB
Groff
504 lines
14 KiB
Groff
.\"
|
|
.\" Copyright (c) 2010 Apple Inc. All rights reserved.
|
|
.\"
|
|
.\" @APPLE_LICENSE_HEADER_START@
|
|
.\"
|
|
.\" This file contains Original Code and/or Modifications of Original Code
|
|
.\" as defined in and that are subject to the Apple Public Source License
|
|
.\" Version 2.0 (the 'License'). You may not use this file except in
|
|
.\" compliance with the License. Please obtain a copy of the License at
|
|
.\" http://www.opensource.apple.com/apsl/ and read it before using this
|
|
.\" file.
|
|
.\"
|
|
.\" The Original Code and all software distributed under the License are
|
|
.\" distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
|
.\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
|
.\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
|
.\" FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
|
.\" Please see the License for the specific language governing rights and
|
|
.\" limitations under the License.
|
|
.\"
|
|
.\" @APPLE_LICENSE_HEADER_END@
|
|
.\"
|
|
.\"
|
|
.\" $NetBSD: open.2,v 1.8 1995/02/27 12:35:14 cgd 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. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the University of
|
|
.\" California, Berkeley and its contributors.
|
|
.\" 4. 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 June 3, 2021
|
|
.Dt OPEN 2
|
|
.Os BSD 4
|
|
.Sh NAME
|
|
.Nm open , openat
|
|
.Nd open or create a file for reading or writing
|
|
.Sh SYNOPSIS
|
|
.\" OH??? .Fd #include <sys/stat.h>
|
|
.Fd #include <fcntl.h>
|
|
.Ft int
|
|
.Fo open
|
|
.Fa "const char *path"
|
|
.Fa "int oflag"
|
|
.Fa "..."
|
|
.Fc
|
|
.Ft int
|
|
.Fn openat "int fd" "const char *path" "int oflag" "..."
|
|
.Sh DESCRIPTION
|
|
The file name specified by
|
|
.Fa path
|
|
is opened
|
|
for reading and/or writing,
|
|
as specified by the argument
|
|
.Fa oflag ;
|
|
the file descriptor is returned to the calling process.
|
|
.Pp
|
|
The
|
|
.Fa oflag
|
|
argument may indicate that the file is to be
|
|
created if it does not exist (by specifying the
|
|
.Dv O_CREAT
|
|
flag). In this case,
|
|
.Fn open
|
|
and
|
|
.Fn openat
|
|
require an additional argument
|
|
.Fa "mode_t mode" ;
|
|
the file is created with mode
|
|
.Fa mode
|
|
as described in
|
|
.Xr chmod 2
|
|
and modified by the process' umask value (see
|
|
.Xr umask 2 ) .
|
|
.Pp
|
|
The
|
|
.Fn openat
|
|
function is equivalent to the
|
|
.Fn open
|
|
function except in the case where the
|
|
.Fa path
|
|
specifies a relative path.
|
|
In this case the file to be opened is determined relative to the directory
|
|
associated with the file descriptor
|
|
.Fa fd
|
|
instead of the current working directory.
|
|
The
|
|
.Fa oflag
|
|
argument and the optional fourth argument correspond exactly to
|
|
the arguments for
|
|
.Fn open .
|
|
If
|
|
.Fn openat
|
|
is passed the special value
|
|
.Dv AT_FDCWD
|
|
in the
|
|
.Fa fd
|
|
argument, the current working directory is used
|
|
and the behavior is identical to a call to
|
|
.Fn open .
|
|
.Pp
|
|
The flags specified
|
|
for the
|
|
.Fa oflag
|
|
argument must include exactly one of the following file access modes:
|
|
.Pp
|
|
.Bd -literal -offset indent -compact
|
|
O_RDONLY open for reading only
|
|
O_WRONLY open for writing only
|
|
O_RDWR open for reading and writing
|
|
O_SEARCH open directory for searching
|
|
O_EXEC open for execute only
|
|
.Ed
|
|
.Pp
|
|
In addition any combination of the following values can be
|
|
.Em or Ns 'ed in
|
|
.Fa oflag:
|
|
.Pp
|
|
.Bd -literal -offset indent -compact
|
|
O_NONBLOCK do not block on open or for data to become available
|
|
O_APPEND append on each write
|
|
O_CREAT create file if it does not exist
|
|
O_TRUNC truncate size to 0
|
|
O_EXCL error if O_CREAT and the file exists
|
|
O_SHLOCK atomically obtain a shared lock
|
|
O_EXLOCK atomically obtain an exclusive lock
|
|
O_DIRECTORY restrict open to a directory
|
|
O_NOFOLLOW do not follow symlinks
|
|
O_SYMLINK allow open of symlinks
|
|
O_EVTONLY descriptor requested for event notifications only
|
|
O_CLOEXEC mark as close-on-exec
|
|
O_NOFOLLOW_ANY do not follow symlinks in the entire path.
|
|
.Ed
|
|
.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.
|
|
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 with
|
|
.Dv O_CREAT
|
|
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
|
|
.Dv O_DIRECTORY
|
|
is used in the mask and the target file passed to
|
|
.Fn open
|
|
is not a directory then the
|
|
.Fn open
|
|
will fail.
|
|
.Pp
|
|
If
|
|
.Dv O_NOFOLLOW
|
|
is used in the mask and the target file passed to
|
|
.Fn open
|
|
is a symbolic link then the
|
|
.Fn open
|
|
will fail.
|
|
.Pp
|
|
If
|
|
.Dv O_SYMLINK
|
|
is used in the mask and the target file passed to
|
|
.Fn open
|
|
is a symbolic link then the
|
|
.Fn open
|
|
will be for the symbolic link itself, not what it links to.
|
|
.Pp
|
|
The
|
|
.Dv O_EVTONLY
|
|
flag is only intended for monitoring a file for changes (e.g. kqueue). Note: when
|
|
this flag is used, the opened file will not prevent an unmount
|
|
of the volume that contains the file.
|
|
.Pp
|
|
The
|
|
.Dv O_CLOEXEC
|
|
flag causes the file descriptor to be marked as close-on-exec,
|
|
setting the
|
|
.Dv FD_CLOEXEC
|
|
flag. The state of the file descriptor flags can be inspected
|
|
using the F_GETFD fcntl. See
|
|
.Xr fcntl 2 .
|
|
.Pp
|
|
If
|
|
.Dv O_NOFOLLOW_ANY
|
|
is used in the mask and any component of the path passed to
|
|
.Fn open
|
|
is a symbolic link then the
|
|
.Fn open
|
|
will fail.
|
|
.Pp
|
|
If successful,
|
|
.Fn open
|
|
returns a non-negative integer, termed a file descriptor.
|
|
It returns -1 on failure.
|
|
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
|
|
system calls; see
|
|
.Xr close 2
|
|
and
|
|
.Xr fcntl 2 .
|
|
.Pp
|
|
The system imposes a limit on the number of file descriptors
|
|
that can be held open simultaneously by one process.
|
|
.Pp
|
|
A file's metadata can be updated even if the file was opened in read-only mode.
|
|
.Xr Getdtablesize 2
|
|
returns the current system limit.
|
|
.Sh RETURN VALUES
|
|
If successful,
|
|
.Fn open
|
|
returns a non-negative integer, termed a file descriptor.
|
|
It returns -1 on failure, and sets
|
|
.Va errno
|
|
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.
|
|
.\" ===========
|
|
.It Bq Er EACCES
|
|
The required permissions (for reading and/or writing or search or executing)
|
|
are denied for the given flags.
|
|
.\" ===========
|
|
.It Bq Er EACCES
|
|
.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 EACCES
|
|
.Dv O_TRUNC
|
|
is specified and write permission is denied.
|
|
.\" ===========
|
|
.It Bq Er EAGAIN
|
|
.Fa path
|
|
specifies the slave side of a locked pseudo-terminal device.
|
|
.\" ===========
|
|
.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.
|
|
.\" ===========
|
|
.It Bq Er EDQUOT
|
|
.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
|
|
are specified and the file exists.
|
|
.\" ===========
|
|
.It Bq Er EFAULT
|
|
.Fa Path
|
|
points outside the process's allocated address space.
|
|
.\" ===========
|
|
.It Bq Er EINTR
|
|
The
|
|
.Fn open
|
|
operation is interrupted by a signal.
|
|
.\" ===========
|
|
.It Bq Er EINVAL
|
|
The value of
|
|
.Fa oflag
|
|
is not valid.
|
|
.\" ===========
|
|
.It Bq Er EIO
|
|
An I/O error occurs 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
|
|
that it is to be opened for writing.
|
|
.\" ===========
|
|
.It Bq Er EISDIR
|
|
The named file is a directory, and the arguments specify
|
|
that it is to be opened for executing.
|
|
.\" ===========
|
|
.It Bq Er ELOOP
|
|
Too many symbolic links are encountered in translating the pathname.
|
|
This is taken to be indicative of a looping symbolic link.
|
|
.\" ===========
|
|
.It Bq Er EMFILE
|
|
The process has already reached its limit for open file descriptors.
|
|
.\" ===========
|
|
.It Bq Er ENAMETOOLONG
|
|
A component of a pathname exceeds
|
|
.Dv {NAME_MAX}
|
|
characters, or an entire path name exceeded
|
|
.Dv {PATH_MAX}
|
|
characters.
|
|
.\" ===========
|
|
.It Bq Er ENFILE
|
|
The system file table is full.
|
|
.\" ===========
|
|
.It Bq Er ENOTDIR
|
|
.Dv O_DIRECTORY
|
|
was specified and the target is not a directory.
|
|
.\" ===========
|
|
.It Bq Er ENOTDIR
|
|
.Dv O_SEARCH
|
|
was specified and the target is not a directory.
|
|
.\" ===========
|
|
.It Bq Er ELOOP
|
|
.Dv O_NOFOLLOW
|
|
was specified and the target is a symbolic link.
|
|
.\" ===========
|
|
.\" ===========
|
|
.It Bq Er ELOOP
|
|
.Dv O_NOFOLLOW_ANY
|
|
was specified and and a component of the path is a symbolic link.
|
|
.\" ===========
|
|
.It Bq Er ENOENT
|
|
.Dv O_CREAT
|
|
is not set and the named file does not exist.
|
|
.\" ===========
|
|
.It Bq Er ENOENT
|
|
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.
|
|
.\" ===========
|
|
.It Bq Er ENOSPC
|
|
.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.
|
|
.\" ===========
|
|
.It Bq Er EDEADLK
|
|
A component of the pathname refers to a
|
|
.Dq dataless
|
|
directory that requires materialization and the I/O policy of the current
|
|
thread or process disallows dataless directory materialization
|
|
.Po see
|
|
.Xr getiopolicy_np 3
|
|
.Pc .
|
|
.\" ===========
|
|
.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.
|
|
.\" ===========
|
|
.It Bq Er ENXIO
|
|
O_NONBLOCK and O_WRONLY are set, the file is a FIFO,
|
|
and no process has it open for reading.
|
|
.\" ===========
|
|
.It Bq Er EOPNOTSUPP
|
|
.Dv O_SHLOCK
|
|
or
|
|
.Dv O_EXLOCK
|
|
is specified, but the underlying filesystem does not support locking.
|
|
.\" ===========
|
|
.It Bq Er EOPNOTSUPP
|
|
An attempt is made to open a socket (not currently implemented).
|
|
.\" ===========
|
|
.It Bq Er EOVERFLOW
|
|
The named file is a regular file
|
|
and its size does not fit in an object of type off_t.
|
|
.\" ===========
|
|
.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.
|
|
.It Bq Er EBADF
|
|
The
|
|
.Fa path
|
|
argument does not specify an absolute path and the
|
|
.Fa fd
|
|
argument is
|
|
neither
|
|
.Dv AT_FDCWD
|
|
nor a valid file descriptor open for searching.
|
|
.It Bq Er ENOTDIR
|
|
The
|
|
.Fa path
|
|
argument is not an absolute path and
|
|
.Fa fd
|
|
is neither
|
|
.Dv AT_FDCWD
|
|
nor a file descriptor associated with a directory.
|
|
.It Bq Er EILSEQ
|
|
The filename does not match the encoding rules.
|
|
.It Bq Er EWOULDBLOCK
|
|
O_SHLOCK or O_EXLOCK is specified, but the file is locked and the O_NONBLOCK option was specified.
|
|
.El
|
|
.Sh COMPATIBILITY
|
|
.Fn open
|
|
on a terminal device (i.e., /dev/console)
|
|
will now make that device a controlling terminal for the process.
|
|
Use the O_NOCTTY flag to open a terminal device
|
|
without changing your controlling terminal.
|
|
.Sh SEE ALSO
|
|
.Xr chmod 2 ,
|
|
.Xr close 2 ,
|
|
.Xr dup 2 ,
|
|
.Xr getdtablesize 2 ,
|
|
.Xr lseek 2 ,
|
|
.Xr read 2 ,
|
|
.Xr umask 2 ,
|
|
.Xr write 2
|
|
.Sh HISTORY
|
|
An
|
|
.Fn open
|
|
function call appeared in
|
|
.At v6 .
|
|
The
|
|
.Fn openat
|
|
function was introduced in OS X 10.10
|