NAME
dirfd — extract
the file descriptor used by a DIR stream
SYNOPSIS
#include
<dirent.h>
int dirfd(DIR *dirp);
DESCRIPTION
The dirfd () function shall return a file
descriptor referring to the same directory as the dirp
argument. This file descriptor shall be closed by a call to
closedir(3). If any attempt is made to close the file
descriptor, or to modify the state of the associated description, other than
by means of closedir(3), readdir(3),
readdir_r(3), or rewinddir(3), the
behavior is undefined.
RETURN VALUE
Upon successful completion, the dirfd ()
function shall return an integer which contains a file descriptor for the
stream pointed to by dirp. Otherwise, it shall return -1
and may set
errno to
indicate the error.
ERRORS
The dirfd () function may fail if:
EXAMPLES
None.
APPLICATION USAGE
The dirfd () function is intended to be a
mechanism by which an application may obtain a file descriptor to use for
the fchdir(3) function.
RATIONALE
This interface was introduced because the Base Definitions volume of POSIX.1-2008 does not make public the DIR data structure. Applications tend to use the fchdir(3) function on the file descriptor returned by this interface, and this has proven useful for security reasons; in particular, it is a better technique than others where directory names might change.
The description uses the term ``a file descriptor'' rather than
``the file descriptor''. The implication intended is that an implementation
that does not use an fd for opendir(3)
could still open(3) the directory to implement the
dirfd () function. Such a descriptor must be closed
later during a call to closedir(3).
An implementation that does not support file descriptors referring to directories may fail with [ENOTSUP].
If it is necessary to allocate an fd to be
returned by dirfd (), it should be done at the time
of a call to opendir(3).
FUTURE DIRECTIONS
None.
SEE ALSO
closedir(3) , fchdir(3) , fdopendir(3) , fileno(3) , open(3) , readdir(3)
XBD <dirent.h>
CHANGE HISTORY
First released in Issue 7.