.\"
-.\" Copyright (c) 2008 Apple Inc. All rights reserved.
+.\" Copyright (c) 2010 Apple Inc. All rights reserved.
.\"
.\" @APPLE_LICENSE_HEADER_START@
.\"
.\"
.\" @(#)open.2 8.2 (Berkeley) 11/16/93
.\"
-.Dd October 7, 2008
+.Dd November 10, 2010
.Dt OPEN 2
.Os BSD 4
.Sh NAME
-.Nm open
+.Nm open , openat
.Nd open or create a file for reading or writing
.Sh SYNOPSIS
.\" OH??? .Fd #include <sys/stat.h>
.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
created if it does not exist (by specifying the
.Dv O_CREAT
flag). In this case,
-.Nm
-requires a third argument
+.Fn open
+and
+.Fn openat
+require an additional argument
.Fa "mode_t mode" ;
the file is created with mode
.Fa mode
and modified by the process' umask value (see
.Xr umask 2 ) .
.Pp
-The flags specified are formed by
+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 are formed by
.Em or Ns 'ing
the following values:
.Pp
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
.Ed
.Pp
Opening a file with
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,
+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
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 successful,
.Fn open
returns a non-negative integer, termed a file descriptor.
executed and the
.Fn open
call requests write access.
+.It Bq Eq 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 Eq 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.
.El
.Sh COMPATIBILITY
.Fn open
.Fn open
function call appeared in
.At v6 .
+The
+.Fn openat
+function was introduced in OS X 10.10