Man pages for the openat(2), fexecve(2) and related syscalls.

Reviewed by:	ru
This commit is contained in:
Konstantin Belousov 2008-04-16 13:03:12 +00:00
parent eab626f110
commit a141af6930
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=178245
15 changed files with 1098 additions and 40 deletions

View file

@ -28,11 +28,13 @@
.\" @(#)access.2 8.2 (Berkeley) 4/1/94
.\" $FreeBSD$
.\"
.Dd February 11, 2008
.Dd April 10, 2008
.Dt ACCESS 2
.Os
.Sh NAME
.Nm access , eaccess
.Nm access ,
.Nm eaccess ,
.Nm faccessat
.Nd check accessibility of a file
.Sh LIBRARY
.Lb libc
@ -42,6 +44,8 @@
.Fn access "const char *path" "int mode"
.Ft int
.Fn eaccess "const char *path" "int mode"
.Ft int
.Fn faccessat "int fd" "const char *path" "int mode" "int flag"
.Sh DESCRIPTION
The
.Fn access
@ -86,6 +90,38 @@ the real user ID in place of the effective user ID,
the real group ID in place of the effective group ID,
and the rest of the group access list.
.Pp
The
.Fn faccessat
system call is equivalent to
.Fn access
except in the case where
.Fa path
specifies a relative path.
In this case the file whose accessibility is to be determined is
located relative to the directory associated with the file descriptor
.Fa fd
instead of the current working directory.
If
.Fn faccessat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fn access .
Values for
.Fa flag
are constructed by a bitwise-inclusive OR of flags from the following
list, defined in
.In fcntl.h :
.Bl -tag -width indent
.It Dv AT_EACCESS
The checks for accessibility are performed using the effective user and group
IDs instead of the real user and group ID as required in a call to
.Fn access .
.El
.Pp
Even if a process's real or effective user has appropriate privileges
and indicates success for
.Dv X_OK ,
@ -125,6 +161,33 @@ points outside the process's allocated address space.
.It Bq Er EIO
An I/O error occurred while reading from or writing to the file system.
.El
.Pp
Also, the
.Fn faccessat
system call may fail if:
.Bl -tag -width Er
.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.
.It Bq Er EINVAL
The value of the
.Fa flag
argument is not valid.
.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.
.El
.Sh SECURITY CONSIDERATIONS
The
.Fn access
@ -158,8 +221,15 @@ The
.Fn access
system call is expected to conform to
.St -p1003.1-90 .
The
.Fn faccessat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn access
function appeared in
.At v7 .
The
.Fn faccessat
system call appeared in
.Fx 8.0 .

View file

@ -28,13 +28,14 @@
.\" @(#)chmod.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd January 16, 2006
.Dd April 10, 2008
.Dt CHMOD 2
.Os
.Sh NAME
.Nm chmod ,
.Nm fchmod ,
.Nm lchmod
.Nm lchmod ,
.Nm fchmodat
.Nd change mode of file
.Sh LIBRARY
.Lb libc
@ -46,6 +47,8 @@
.Fn fchmod "int fd" "mode_t mode"
.Ft int
.Fn lchmod "const char *path" "mode_t mode"
.Ft int
.Fn fchmodat "int fd" "const char *path" "mode_t mode" "int flag"
.Sh DESCRIPTION
The file permission bits of the file named specified by
.Fa path
@ -73,6 +76,45 @@ system call is similar to
.Fn chmod
but does not follow symbolic links.
.Pp
The
.Fn fchmodat
is equivalent to either
.Fn chmod
or
.Fn lchmod
depending on the
.Fa flag
except in the case where
.Fa path
specifies a relative path.
In this case the file to be changed is determined relative to the directory
associated with the file descriptor
.Fa fd
instead of the current working directory.
The values for the
.Fa flag
are constructed by a bitwise-inclusive OR of flags from the following list, defined
in
.In fcntl.h :
.Bl -tag -width indent
.It Dv AT_SYMLINK_NOFOLLOW
If
.Fa path
names a symbolic link, then the mode of the symbolic link is changed.
.El
.Pp
If
.Fn fchmodat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used.
If also
.Fa flag
is zero, the behavior is identical to a call to
.Fn chmod .
.Pp
A mode is created from
.Em or'd
permission bit masks
@ -213,6 +255,34 @@ The file resides on a read-only file system.
.It Bq Er EIO
An I/O error occurred while reading from or writing to the file system.
.El
.Pp
In addition to the
.Fn chmod
errors,
.Fn fchmodat
fails if:
.Bl -tag -width Er
.It Bq Er EBADF
The
.Fa path
argument does not specify an absolute path and the
.Fa fd
argument is neither
.Fa AT_FDCWD
nor a valid file descriptor open for searching.
.It Bq Er EINVAL
The value of the
.Fa flag
argument is not valid.
.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.
.El
.Sh SEE ALSO
.Xr chmod 1 ,
.Xr chflags 2 ,
@ -229,6 +299,9 @@ except for the return of
.Er EFTYPE
and the use of
.Dv S_ISTXT .
The
.Fn fchmodat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn chmod
@ -242,3 +315,7 @@ The
.Fn lchmod
system call appeared in
.Fx 3.0 .
The
.Fn fchmodat
system call appeared in
.Fx 8.0 .

View file

@ -28,13 +28,14 @@
.\" @(#)chown.2 8.4 (Berkeley) 4/19/94
.\" $FreeBSD$
.\"
.Dd December 9, 2006
.Dd April 10, 2008
.Dt CHOWN 2
.Os
.Sh NAME
.Nm chown ,
.Nm fchown ,
.Nm lchown
.Nm lchown ,
.Nm fchownat
.Nd change owner and group of a file
.Sh LIBRARY
.Lb libc
@ -46,6 +47,8 @@
.Fn fchown "int fd" "uid_t owner" "gid_t group"
.Ft int
.Fn lchown "const char *path" "uid_t owner" "gid_t group"
.Ft int
.Fn fchownat "int fd" "const char *path" "uid_t owner" "gid_t group" "int flag"
.Sh DESCRIPTION
The owner ID and group ID of the file
named by
@ -91,6 +94,49 @@ system call is similar to
.Fn chown
but does not follow symbolic links.
.Pp
The
.Fn fchownat
system call is equivalent to the
.Fn chown
and
.Fn lchown
except in the case where
.Fa path
specifies a relative path.
In this case the file to be changed is determined relative to the directory
associated with the file descriptor
.Fa fd
instead of the current working directory.
.Pp
Values for
.Fa flag
are constructed by a bitwise-inclusive OR of flags from the following
list, defined in
.In fcntl.h :
.Bl -tag -width indent
.It Dv AT_SYMLINK_NOFOLLOW
If
.Fa path
names a symbolic link, ownership of the symbolic link is changed.
.El
.Pp
If
.Fn fchownat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is identical
to a call to
.Fn chown
or
.Fn lchown
respectively, depending on whether or not the
.Dv AT_SYMLINK_NOFOLLOW
bit is set in the
.Fa flag
argument.
.Pp
One of the owner or group id's
may be left unchanged by specifying it as -1.
.Sh RETURN VALUES
@ -152,6 +198,36 @@ The named file resides on a read-only file system.
.It Bq Er EIO
An I/O error occurred while reading from or writing to the file system.
.El
.Pp
In addition to the errors specified for
.Fn chown
and
.Fn lchown ,
the
.Fn fchownat
system call may fail if:
.Bl -tag -width Er
.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 EINVAL
The value of the
.Fa flag
argument is not valid.
.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.
.El
.Sh SEE ALSO
.Xr chgrp 1 ,
.Xr chflags 2 ,
@ -163,6 +239,9 @@ The
.Fn chown
system call is expected to conform to
.St -p1003.1-90 .
The
.Fn fchownat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn chown
@ -182,3 +261,8 @@ The
system call was added in
.Fx 3.0
to compensate for the loss of functionality.
.Pp
The
.Fn fchownat
system call appeared in
.Fx 8.0 .

View file

@ -28,11 +28,12 @@
.\" @(#)execve.2 8.5 (Berkeley) 6/1/94
.\" $FreeBSD$
.\"
.Dd June 1, 1994
.Dd April 10, 2008
.Dt EXECVE 2
.Os
.Sh NAME
.Nm execve
.Nm execve ,
.Nm fexecve
.Nd execute a file
.Sh LIBRARY
.Lb libc
@ -40,6 +41,8 @@
.In unistd.h
.Ft int
.Fn execve "const char *path" "char *const argv[]" "char *const envp[]"
.Ft int
.Fn fexecve "int fd" "char *const argv[]" "char *const envp[]"
.Sh DESCRIPTION
The
.Fn execve
@ -50,6 +53,15 @@ whose name is pointed to by
.Fa path ,
called the
.Em new process file .
The
.Fn fexecve
system call is equivalent to
.Fn execve
except that the file to be executed is determined by the file
descriptor
.Fa fd
instead of a
.Fa path .
This file is either an executable object file,
or a file of data for an interpreter.
An executable object file consists of an identifying header,
@ -199,6 +211,29 @@ and
.Fa argv
points to the array of character pointers
to the arguments themselves.
.Pp
The
.Fn fexecve
ignores the file offset of
.Fa fd .
Since execute permission is checked by
.Fn fexecve ,
the file descriptor
.Fa fd
need not have been
opened with the
.Dv O_EXEC
flag.
However, if the file to be executed denies read and write
permission for the process preparing to do the exec, the only way to
provide the
.Fa fd
to
.Fn fexecve
is to use the
.Dv O_EXEC
flag when opening
.Fa fd .
.Sh RETURN VALUES
As the
.Fn execve
@ -269,6 +304,16 @@ to an illegal address.
.It Bq Er EIO
An I/O error occurred while reading from the file system.
.El
.Pp
In addition, the
.Fn fexecve
will fail and return to the calling process if:
.Bl -tag -width Er
.It Bq Er EBADF
The
.Fa fd
argument is not a valid file descriptor open for executing.
.El
.Sh CAVEAT
If a program is
.Em setuid
@ -281,6 +326,7 @@ of a super-user as well.
.Xr ktrace 1 ,
.Xr _exit 2 ,
.Xr fork 2 ,
.Xr open 2 ,
.Xr execl 3 ,
.Xr exit 3 ,
.Xr sysctl 3 ,
@ -299,8 +345,15 @@ A future update of the Standard is expected to require this behavior,
and it may become the default for non-privileged processes as well.
.\" NB: update this caveat when TC1 is blessed.
The support for executing interpreted programs is an extension.
The
.Fn fexecve
system call conforms to The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn execve
system call appeared in
.Bx 4.2 .
The
.Fn fexecve
system call appeared in
.Fx 8.0 .

View file

@ -28,11 +28,12 @@
.\" @(#)link.2 8.3 (Berkeley) 1/12/94
.\" $FreeBSD$
.\"
.Dd December 9, 2006
.Dd April 10, 2008
.Dt LINK 2
.Os
.Sh NAME
.Nm link
.Nm link ,
.Nm linkat
.Nd make a hard file link
.Sh LIBRARY
.Lb libc
@ -40,6 +41,10 @@
.In unistd.h
.Ft int
.Fn link "const char *name1" "const char *name2"
.Ft int
.Fo linkat
.Fa "int fd1" "const char *name1" "int fd2" "const char *name2" "int flag"
.Fc
.Sh DESCRIPTION
The
.Fn link
@ -79,6 +84,67 @@ The
.Fa name1
argument
may not be a directory.
.Pp
The
.Fn linkat
system call is equivalent to
.Fa link
except in the case where either
.Fa name1
or
.Fa name2
or both are relative paths.
In this case a relative path
.Fa name1
is interpreted relative to
the directory associated with the file descriptor
.Fa fd1
instead of the current working directory and similarly for
.Fa name2
and the file descriptor
.Fa fd2 .
.Pp
Values for
.Fa flag
are constructed by a bitwise-inclusive OR of flags from the following
list, defined in
.In fcntl.h :
.Bl -tag -width indent
.It Dv AT_SYMLINK_NOFOLLOW
If
.Fa name1
names a symbolic link, a new link for the target of the symbolic link is
created.
.El
.Pp
If
.Fn linkat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd1
or
.Fa fd2
parameter, the current working directory is used for the respective
.Fa name
argument.
If both
.Fa fd1
and
.Fa fd2
have value
.Dv AT_FDCWD ,
the behavior is identical to a call to
.Fn link .
Unless
.Fa flag
contains the
.Dv AT_SYMLINK_FOLLOW
flag, if
.Fa name1
names a symbolic link, a new link is created for the symbolic link
.Fa name1
and not its target.
.Sh RETURN VALUES
.Rv -std link
.Sh ERRORS
@ -156,6 +222,42 @@ system.
One of the pathnames specified
is outside the process's allocated address space.
.El
.Pp
In addition to the errors returned by the
.Fn link ,
the
.Fn linkat
system call may fail if:
.Bl -tag -width Er
.It Bq Er EBADF
The
.Fa name1
or
.Fa name2
argument does not specify an absolute path and the
.Fa fd1
or
.Fa fd2
argument, respectively, is neither
.Dv AT_FDCWD
nor a valid file descriptor open for searching.
.It Bq Er EINVAL
The value of the
.Fa flag
argument is not valid.
.It Bq Er ENOTDIR
The
.Fa name1
or
.Fa name2
argument is not an absolute path and
.Fa fd1
or
.Fa fd2 ,
respectively, is neither
.Dv AT_FDCWD
nor a file descriptor associated with a directory.
.El
.Sh SEE ALSO
.Xr chflags 2 ,
.Xr readlink 2 ,
@ -166,15 +268,21 @@ The
.Fn link
system call is expected to conform to
.St -p1003.1-90 .
The
.Fn linkat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn link
function appeared in
.At v7 .
The
.Fn linkat
system call appeared in
.Fx 8.0 .
.Pp
The
.Fn link
system call traditionally allows the super-user to link directories which
corrupts the file system coherency.
This implementation no longer permits
it.
This implementation no longer permits it.

View file

@ -28,11 +28,12 @@
.\" @(#)mkdir.2 8.2 (Berkeley) 12/11/93
.\" $FreeBSD$
.\"
.Dd December 9, 2006
.Dd April 10, 2008
.Dt MKDIR 2
.Os
.Sh NAME
.Nm mkdir
.Nm mkdir ,
.Nm mkdirat
.Nd make a directory file
.Sh LIBRARY
.Lb libc
@ -41,6 +42,8 @@
.In sys/stat.h
.Ft int
.Fn mkdir "const char *path" "mode_t mode"
.Ft int
.Fn mkdirat "int fd" "const char *path" "mode_t mode"
.Sh DESCRIPTION
The directory
.Fa path
@ -53,6 +56,27 @@ of the calling process.
The directory's owner ID is set to the process's effective user ID.
The directory's group ID is set to that of the parent directory in
which it is created.
.Pp
The
.Fn mkdirat
system call is equivalent to
.Fn mkdir
except in the case where
.Fa path
specifies a relative path.
In this case the newly created directory is created relative to the
directory associated with the file descriptor
.Fa fd
instead of the current working directory.
If
.Fn mkdirat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fn mkdir .
.Sh RETURN VALUES
.Rv -std mkdir
.Sh ERRORS
@ -106,6 +130,30 @@ The
argument
points outside the process's allocated address space.
.El
.Pp
In addition to the errors returned by the
.Fn mkdir ,
the
.Fn mkdirat
may fail if:
.Bl -tag -width Er
.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.
.El
.Sh SEE ALSO
.Xr chflags 2 ,
.Xr chmod 2 ,
@ -116,3 +164,11 @@ The
.Fn mkdir
system call is expected to conform to
.St -p1003.1-90 .
The
.Fn mkdirat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn mkdirat
system call appeared in
.Fx 8.0 .

View file

@ -28,11 +28,12 @@
.\" @(#)mkfifo.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd December 10, 2006
.Dd April 10, 2008
.Dt MKFIFO 2
.Os
.Sh NAME
.Nm mkfifo
.Nm mkfifo ,
.Nm mkfifoat
.Nd make a fifo file
.Sh LIBRARY
.Lb libc
@ -41,6 +42,8 @@
.In sys/stat.h
.Ft int
.Fn mkfifo "const char *path" "mode_t mode"
.Ft int
.Fn mkfifoat "int fd" "const char *path" "mode_t mode"
.Sh DESCRIPTION
The
.Fn mkfifo
@ -57,6 +60,27 @@ of the calling process.
The fifo's owner ID is set to the process's effective user ID.
The fifo's group ID is set to that of the parent directory in
which it is created.
.Pp
The
.Fn mkfifoat
system call is equivalent to
.Fn mkfifo
except in the case where
.Fa path
specifies a relative path.
In this case the newly created FIFO is created relative to the
directory associated with the file descriptor
.Fa fd
instead of the current working directory.
If
.Fn mkfifoat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fn mkfifo .
.Sh RETURN VALUES
.Rv -std mkfifo
.Sh ERRORS
@ -116,6 +140,30 @@ The
argument
points outside the process's allocated address space.
.El
.Pp
In addition to the errors returned by the
.Fn mkfifo ,
the
.Fn mkfifoat
may fail if:
.Bl -tag -width Er
.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.
.El
.Sh SEE ALSO
.Xr chflags 2 ,
.Xr chmod 2 ,
@ -127,3 +175,11 @@ The
.Fn mkfifo
system call is expected to conform to
.St -p1003.1-90 .
The
.Fn mkfifoat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn mkfifoat
system call appeared in
.Fx 8.0 .

View file

@ -28,11 +28,12 @@
.\" @(#)mknod.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd June 4, 1993
.Dd April 10, 2008
.Dt MKNOD 2
.Os
.Sh NAME
.Nm mknod
.Nm mknod ,
.Nm mknodat
.Nd make a special file node
.Sh LIBRARY
.Lb libc
@ -40,6 +41,8 @@
.In unistd.h
.Ft int
.Fn mknod "const char *path" "mode_t mode" "dev_t dev"
.Ft int
.Fn mknodat "int fd" "const char *path" "mode_t mode" "dev_t dev"
.Sh DESCRIPTION
The file system node
.Fa path
@ -61,6 +64,27 @@ The
.Fn mknod
system call
requires super-user privileges.
.Pp
The
.Fn mknodat
system call is equivalent to
.Fn mknod
except in the case where
.Fa path
specifies a relative path.
In this case the newly created device node is created relative to the
directory associated with the file descriptor
.Fa fd
instead of the current working directory.
If
.Fn mknodat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fn mknod .
.Sh RETURN VALUES
.Rv -std mknod
.Sh ERRORS
@ -114,13 +138,45 @@ file (or a
.Em whiteout )
is not supported.
.El
.Pp
In addition to the errors returned by the
.Fn mknod ,
the
.Fn mknodat
may fail if:
.Bl -tag -width Er
.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.
.El
.Sh SEE ALSO
.Xr chmod 2 ,
.Xr mkfifo 2 ,
.Xr stat 2 ,
.Xr umask 2
.Sh STANDARDS
The
.Fn mknodat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn mknod
function appeared in
.At v6 .
The
.Fn mknodat
system call appeared in
.Fx 8.0 .

View file

@ -28,23 +28,25 @@
.\" @(#)open.2 8.2 (Berkeley) 11/16/93
.\" $FreeBSD$
.\"
.Dd January 7, 2007
.Dd April 10, 2008
.Dt OPEN 2
.Os
.Sh NAME
.Nm open
.Nd open or create a file for reading or writing
.Nm open , openat
.Nd open or create a file for reading, writing or executing
.Sh LIBRARY
.Lb libc
.Sh SYNOPSIS
.In fcntl.h
.Ft int
.Fn open "const char *path" "int flags" "..."
.Ft int
.Fn openat "int fd" "const char *path" "int flags" "..."
.Sh DESCRIPTION
The file name specified by
.Fa path
is opened
for reading and/or writing as specified by the
for either execution or reading and/or writing as specified by the
argument
.Fa flags
and the file descriptor returned to the calling process.
@ -56,7 +58,9 @@ created if it does not exist (by specifying the
flag).
In this case
.Fn open
requires a third argument
and
.Fn openat
require an additional argument
.Fa "mode_t mode" ,
and the file is created with mode
.Fa mode
@ -65,6 +69,32 @@ as described in
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 flag
parameter and the optional fourth parameter correspond exactly to
the parameters of
.Fn open .
If
.Fn openat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used
and the behavior is identical to a call to
.Fn open .
.Pp
The flags specified are formed by
.Em or Ns 'ing
the following values
@ -73,6 +103,7 @@ the following values
O_RDONLY open for reading only
O_WRONLY open for writing only
O_RDWR open for reading and writing
O_EXEC open for execute only
O_NONBLOCK do not block on open
O_APPEND append on each write
O_CREAT create file if it does not exist
@ -180,7 +211,7 @@ system call will not assign controlling terminals on
If successful,
.Fn open
returns a non-negative integer, termed a file descriptor.
It returns -1 on failure.
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
@ -202,8 +233,10 @@ system call 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
and
.Fn openat
return a non-negative integer, termed a file descriptor.
They return \-1 on failure, and set
.Va errno
to indicate the error.
.Sh ERRORS
@ -346,13 +379,32 @@ An attempt was made to open a descriptor with an illegal combination
of
.Dv O_RDONLY ,
.Dv O_WRONLY ,
.Dv O_RDWR
and
.Dv O_RDWR .
.Dv O_EXEC.
.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 SEE ALSO
.Xr chmod 2 ,
.Xr close 2 ,
.Xr dup 2 ,
.Xr fexecve 2 ,
.Xr fhopen 2 ,
.Xr getdtablesize 2 ,
.Xr getfh 2 ,
@ -367,3 +419,18 @@ The
.Fn open
function appeared in
.At v6 .
The
.Fn openat
function was introduced in
.Fx 8.0 .
.Sh BUGS
The Open Group Extended API Set 2 specification requires that the test
for whether
.Fa fd
is searchable is based on whether
.Fa fd
is open for searching, not whether the underlying directory currently
permits searches.
The present implementation of the
.Fa openat
checks the current permissions of directory instead.

View file

@ -28,11 +28,12 @@
.\" @(#)readlink.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd February 26, 2008
.Dd April 10, 2008
.Dt READLINK 2
.Os
.Sh NAME
.Nm readlink
.Nm readlink ,
.Nm readlinkat
.Nd read value of a symbolic link
.Sh LIBRARY
.Lb libc
@ -40,6 +41,10 @@
.In unistd.h
.Ft ssize_t
.Fn readlink "const char *restrict path" "char *restrict buf" "size_t bufsiz"
.Ft ssize_t
.Fo readlinkat
.Fa "int fd" "const char *restrict path" "char *restrict buf" "size_t bufsize"
.Fc
.Sh DESCRIPTION
The
.Fn readlink
@ -56,6 +61,27 @@ system call does not append a
.Dv NUL
character to
.Fa buf .
.Pp
The
.Fn readlinkat
system call is equivalent to
.Fn readlink
except in the case where
.Fa path
specifies a relative path.
In this case the symbolic link whose content is read relative to the
directory associated with the file descriptor
.Fa fd
instead of the current working directory.
If
.Fn readlinkat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fn readlink .
.Sh RETURN VALUES
The call returns the count of characters placed in the buffer
if it succeeds, or a \-1 if an error occurs, placing the error
@ -88,13 +114,45 @@ The
argument
extends outside the process's allocated address space.
.El
.Pp
In addition to the errors returned by the
.Fn readlink ,
the
.Fn readlinkat
may fail if:
.Bl -tag -width Er
.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.
.El
.Sh SEE ALSO
.Xr lstat 2 ,
.Xr stat 2 ,
.Xr symlink 2 ,
.Xr symlink 7
.Sh STANDARDS
The
.Fn readlinkat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn readlink
system call appeared in
.Bx 4.2 .
The
.Fn readlinkat
system call appeared in
.Fx 8.0 .

View file

@ -28,7 +28,7 @@
.\" @(#)rename.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd December 9, 2006
.Dd April 10, 2008
.Dt RENAME 2
.Os
.Sh NAME
@ -40,6 +40,8 @@
.In stdio.h
.Ft int
.Fn rename "const char *from" "const char *to"
.Ft int
.Fn renameat "int fromfd" "const char *from" "int tofd" "const char *to"
.Sh DESCRIPTION
The
.Fn rename
@ -73,6 +75,37 @@ If the final component of
is a symbolic link,
the symbolic link is renamed,
not the file or directory to which it points.
.Pp
The
.Fn renameat
system call is equivalent to
.Fn rename
except in the case where either
.Fa from
or
.Fa to
specifies a relative path.
If
.Fa from
is a relative path, the file to be renamed is located
relative to the directory associated with the file descriptor
.Fa fromfd
instead of the current working directory.
If the
.Fa to
is a relative path, the same happens only relative to the directory associated
with
.Fa tofd .
If the
.Fn renameat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fromfd
or
.Fa tofd
parameter, the current working directory is used in the determination
of the file for the respective path parameter.
.\".Sh CAVEAT
.\"The system can deadlock if a loop in the file system graph is present.
.\"This loop takes the form of an entry in directory
@ -215,6 +248,42 @@ The
argument
is a directory and is not empty.
.El
.Pp
In addition to the errors returned by the
.Fn rename ,
the
.Fn renameat
may fail if:
.Bl -tag -width Er
.It Bq Er EBADF
The
.Fa from
argument does not specify an absolute path and the
.Fa fromfd
argument is neither
.Dv AT_FDCWD
nor a valid file descriptor open for searching, or the
.Fa to
argument does not specify an absolute path and the
.Fa tofd
argument is neither
.Dv AT_FDCWD
nor a valid file descriptor open for searching.
.It Bq Er ENOTDIR
The
.Fa from
argument is not an absolute path and
.Fa fromfd
is neither
.Dv AT_FDCWD
nor a file descriptor associated with a directory, or the
.Fa to
argument is not an absolute path and
.Fa tofd
is neither
.Dv AT_FDCWD
nor a file descriptor associated with a directory.
.El
.Sh SEE ALSO
.Xr chflags 2 ,
.Xr open 2 ,
@ -224,3 +293,11 @@ The
.Fn rename
system call is expected to conform to
.St -p1003.1-96 .
The
.Fn renameat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn renameat
system call appeared in
.Fx 8.0 .

View file

@ -28,13 +28,14 @@
.\" @(#)stat.2 8.4 (Berkeley) 5/1/95
.\" $FreeBSD$
.\"
.Dd October 12, 2006
.Dd April 10, 2008
.Dt STAT 2
.Os
.Sh NAME
.Nm stat ,
.Nm lstat ,
.Nm fstat
.Nm fstat ,
.Nm fstatat
.Nd get file status
.Sh LIBRARY
.Lb libc
@ -47,6 +48,8 @@
.Fn lstat "const char *path" "struct stat *sb"
.Ft int
.Fn fstat "int fd" "struct stat *sb"
.Ft int
.Fn fstatat "int fd" "const char *path" "struct stat *buf" "int flag"
.Sh DESCRIPTION
The
.Fn stat
@ -75,6 +78,48 @@ known by the file descriptor
.Fa fd .
.Pp
The
.Fn fstatat
system call is equivalent to
.Fn stat
and
.Fn lstat
except in the case where the
.Fa path
specifies a relative path.
In this case the status is retrieved from a file relative to
the directory associated with the file descriptor
.Fa fd
instead of the current working directory.
.Pp
The values for the
.Fa flag
are constructed by a bitwise-inclusive OR of flags from the following list,
defined in
.In fcntl.h :
.Bl -tag -width indent
.It Dv AT_SYMLINK_NOFOLLOW
If
.Fa path
names a symbolic link, the status of the symbolic link is returned.
.El
.Pp
If
.Fn fstatat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fn stat
or
.Fn lstat
respectively, depending on whether or not the
.Dv AT_SYMLINK_NOFOLLOW
bit is set in
.Fa flag .
.Pp
The
.Fa sb
argument is a pointer to a
.Vt stat
@ -315,6 +360,34 @@ The file size in bytes cannot be
represented correctly in the structure pointed to by
.Fa sb .
.El
.Pp
In addition to the errors returned by the
.Fn lstat ,
the
.Fn fstatat
may fail if:
.Bl -tag -width Er
.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 EINVAL
The value of the
.Fa flag
argument is not valid.
.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.
.El
.Sh SEE ALSO
.Xr access 2 ,
.Xr chmod 2 ,
@ -331,6 +404,9 @@ and
.Fn fstat
system calls are expected to conform to
.St -p1003.1-90 .
The
.Fn fchownat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn stat
@ -342,6 +418,10 @@ The
.Fn lstat
system call appeared in
.Bx 4.2 .
The
.Fn fstatat
system call appeared in
.Fx 8.0 .
.Sh BUGS
Applying
.Fn fstat

View file

@ -28,11 +28,12 @@
.\" @(#)symlink.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd December 9, 2006
.Dd April 10, 2008
.Dt SYMLINK 2
.Os
.Sh NAME
.Nm symlink
.Nm symlink ,
.Nm symlinkat
.Nd make symbolic link to a file
.Sh LIBRARY
.Lb libc
@ -40,6 +41,8 @@
.In unistd.h
.Ft int
.Fn symlink "const char *name1" "const char *name2"
.Ft int
.Fn symlinkat "const char *name1" "int fd" "const char *name2"
.Sh DESCRIPTION
A symbolic link
.Fa name2
@ -53,6 +56,27 @@ is the string
used in creating the symbolic link).
Either name may be an arbitrary path name; the files need not
be on the same file system.
.Pp
The
.Fn symlinkat
system call is equivalent to
.Fn symlink
except in the case where
.Fa name2
specifies a relative path.
In this case the symbolic link is created relative to the directory
associated with the file descriptor
.Fa fd
instead of the current working directory.
If
.Fn symlinkat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fn symlink .
.Sh RETURN VALUES
.Rv -std symlink
.Sh ERRORS
@ -135,6 +159,30 @@ or
argument
points outside the process's allocated address space.
.El
.Pp
In addition to the errors returned by the
.Fn symlink ,
the
.Fn symlinkat
may fail if:
.Bl -tag -width Er
.It Bq Er EBADF
The
.Fa name2
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 name2
argument is not an absolute path and
.Fa fd
is neither
.Dv AT_FDCWD
nor a file descriptor associated with a directory.
.El
.Sh SEE ALSO
.Xr ln 1 ,
.Xr chflags 2 ,
@ -143,8 +191,16 @@ points outside the process's allocated address space.
.Xr readlink 2 ,
.Xr unlink 2 ,
.Xr symlink 7
.Sh STANDARDS
The
.Fn symlinkat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn symlink
system call appeared in
.Bx 4.2 .
The
.Fn symlinkat
system call appeared in
.Fx 8.0 .

View file

@ -28,11 +28,12 @@
.\" @(#)unlink.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd December 10, 2006
.Dd April 10, 2008
.Dt UNLINK 2
.Os
.Sh NAME
.Nm unlink
.Nm unlink ,
.Nm unlinkat
.Nd remove directory entry
.Sh LIBRARY
.Lb libc
@ -40,6 +41,8 @@
.In unistd.h
.Ft int
.Fn unlink "const char *path"
.Ft int
.Fn unlinkat "int fd" "const char *path" "int flag"
.Sh DESCRIPTION
The
.Fn unlink
@ -59,6 +62,49 @@ The
.Fa path
argument
may not be a directory.
.Pp
The
.Fn unlinkat
system call is equivalent to
.Fn unlink
or
.Fn rmdir
except in the case where
.Fa path
specifies a relative path.
In this case the directory entry to be removed is determined
relative to the directory associated with the file descriptor
.Fa fd
instead of the current working directory.
.Pp
The values for
.Fa flag
are constructed by a bitwise-inclusive OR of flags from the following list,
defined in
.In fcntl.h :
.Bl -tag -width indent
.It Dv AT_REMOVEDIR
Remove the directory entry specified by
.Fa fd
and
.Fa path
as a directory, not a normal file.
.El
.Pp
If
.Fn unlinkat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is
identical to a call to
.Fa unlink
or
.Fa rmdir
respectively, depending on whether or not the
.Dv AT_REMOVEDIR
bit is set in flag.
.Sh RETURN VALUES
.Rv -std unlink
.Sh ERRORS
@ -104,21 +150,74 @@ The
argument
points outside the process's allocated address space.
.El
.Pp
In addition to the errors returned by the
.Fn unlink ,
the
.Fn unlinkat
may fail if
.Bl -tag -width Er
.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 EEXIST
The
.Fa flag
parameter has the
.Dv AT_REMOVEDIR
bit set and the
.Fa path
argument names a directory that is not an empty directory,
or there are hard links to the directory other than dot or
a single entry in dot-dot.
.It Bq Er ENOTDIR
The
.Fa flag
parameter has the
.Dv AT_REMOVEDIR
bit set and
.Fa path
does not name a directory.
.It Bq Er EINVAL
The value of the
.Fa flag
argument is not valid.
.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.
.El
.Sh SEE ALSO
.Xr chflags 2 ,
.Xr close 2 ,
.Xr link 2 ,
.Xr rmdir 2 ,
.Xr symlink 7
.Sh STANDARDS
The
.Fn unlinkat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn unlink
function appeared in
.At v6 .
The
.Fn unlinkat
system call appeared in
.Fx 8.0 .
.Pp
The
.Fn unlink
system call traditionally allows the super-user to unlink directories which
can damage the file system integrity.
This implementation no longer permits
it.
This implementation no longer permits it.

View file

@ -30,13 +30,14 @@
.\" @(#)utimes.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd December 9, 2006
.Dd April 10, 2008
.Dt UTIMES 2
.Os
.Sh NAME
.Nm utimes ,
.Nm lutimes ,
.Nm futimes
.Nm futimes ,
.Nm futimesat
.Nd set file access and modification times
.Sh LIBRARY
.Lb libc
@ -48,6 +49,8 @@
.Fn lutimes "const char *path" "const struct timeval *times"
.Ft int
.Fn futimes "int fd" "const struct timeval *times"
.Ft int
.Fn futimesat "int fd" "const char *path" "const struct timeval times[2]"
.Sh DESCRIPTION
The access and modification times of the file named by
.Fa path
@ -97,6 +100,28 @@ changes the access and modification times of the link,
while
.Fn utimes
changes the times of the file the link references.
.Pp
The
.Fn futimesat
system call is equivalent to
.Fn utimes
except in the case where
.Fa path
specifies a relative path.
In this case the access and modification time
is set to that of a file relative to the directory associated with the file
descriptor
.Fa fd
instead of the current working directory.
If
.Fn futimesat
is passed the special value
.Dv AT_FDCWD
in the
.Fa fd
parameter, the current working directory is used and the behavior is identical to
a call to
.Fn utimes .
.Sh RETURN VALUES
.Rv -std
.Sh ERRORS
@ -197,10 +222,42 @@ does not match the owner of the file and is not the super-user.
.It Bq Er EROFS
The file system containing the file is mounted read-only.
.El
.Pp
In addition to the errors returned by the
.Fn utimes ,
the
.Fn futimesat
may fail if:
.Bl -tag -width Er
.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.
.El
.Sh SEE ALSO
.Xr chflags 2 ,
.Xr stat 2 ,
.Xr utime 3
.Sh STANDARDS
The
.Fn utimes
function is expected to conform to
.St -xpg4.2 .
The
.Fn futimesat
system call follows The Open Group Extended API Set 2 specification.
.Sh HISTORY
The
.Fn utimes
@ -212,3 +269,7 @@ and
.Fn lutimes
system calls first appeared in
.Fx 3.0 .
The
.Fn futimesat
system call appeared in
.Fx 8.0 .