.\" SUCH DAMAGE.
.\"
.\" @(#)directory.3 8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: src/lib/libc/gen/directory.3,v 1.12 2001/10/01 16:08:50 ru Exp $
+.\" $FreeBSD$
.\"
-.Dd June 4, 1993
+.Dd April 16, 2008
.Dt DIRECTORY 3
.Os
.Sh NAME
-.Nm closedir ,
-.Nm dirfd ,
.Nm opendir ,
+.Nm fdopendir ,
.Nm readdir ,
.Nm readdir_r ,
-.Nm rewinddir ,
+.Nm telldir ,
.Nm seekdir ,
-.Nm telldir
+.Nm rewinddir ,
+.Nm closedir ,
+.Nm dirfd
.Nd directory operations
.Sh LIBRARY
.Lb libc
.Sh SYNOPSIS
.In dirent.h
-.Ft int
-.Fn closedir "DIR *dirp"
-.Ft int
-.Fn dirfd "DIR *dirp"
.Ft DIR *
-.Fn opendir "const char *dirname"
+.Fn opendir "const char *filename"
+.Ft DIR *
+.Fn fdopendir "int fd"
.Ft struct dirent *
.Fn readdir "DIR *dirp"
.Ft int
-.Fn readdir_r "DIR *restrict dirp" "struct dirent *restrict entry" \
- "struct dirent **restrict result"
-.Ft void
-.Fn rewinddir "DIR *dirp"
-.Ft void
-.Fn seekdir "DIR *dirp" "long loc"
+.Fn readdir_r "DIR *dirp" "struct dirent *entry" "struct dirent **result"
.Ft long
.Fn telldir "DIR *dirp"
+.Ft void
+.Fn seekdir "DIR *dirp" "long loc"
+.Ft void
+.Fn rewinddir "DIR *dirp"
+.Ft int
+.Fn closedir "DIR *dirp"
+.Ft int
+.Fn dirfd "DIR *dirp"
.Sh DESCRIPTION
The
.Fn opendir
function
opens the directory named by
-.Fa dirname ,
+.Fa filename ,
associates a
.Em directory stream
-with it,
-and returns a pointer to be used to identify the
+with it
+and
+returns a pointer to be used to identify the
.Em directory stream
in subsequent operations.
-In the event of an error, NULL
-is returned and
-.Va errno
-will be set to reflect if
-.Fa dirname
-cannot be accessed or if it cannot
+The pointer
+.Dv NULL
+is returned if
+.Fa filename
+cannot be accessed, or if it cannot
.Xr malloc 3
-enough memory to hold the whole thing.
+enough memory to hold the whole thing,
+and sets the global variable
+.Va errno
+to indicate the error.
+.Pp
+The
+.Fn fdopendir
+function is equivalent to the
+.Fn opendir
+function except that the directory is specified by a file descriptor
+.Fa fd
+rather than by a name.
+./"The file offset associated with the file descriptor at the time of the call
+./"determines which entries are returned.
+.Pp
+Upon successful return from
+.Fn fdopendir ,
+the file descriptor is under the control of the system,
+and if any attempt is made to close the file descriptor,
+or to modify the state of the associated description other than by means
+of
+.Fn closedir ,
+.Fn readdir ,
+.Fn readdir_r ,
+or
+.Fn rewinddir ,
+the behavior is undefined.
+Upon calling
+.Fn closedir
+the file descriptor is closed.
+The
+.Dv FD_CLOEXEC
+flag is set on the file descriptor by a successful call to
+.Fn fdopendir .
.Pp
The
.Fn readdir
upon reaching the end of the directory or on error.
In the event of an error,
.Va errno
-will be set to any of the values documented for the
+may be set to any of the values documented for the
.Xr getdirentries 2
system call.
.Pp
.Fa result
is pointed at the
.Fa entry ;
-upon reaching the end of the directory,
+upon reaching the end of the directory
.Fa result
is set to
.Dv NULL .
.Fn telldir
are good only for the lifetime of the
.Dv DIR
-pointer (e.g.,
-.Fa dirp )
+pointer,
+.Fa dirp ,
from which they are derived.
If the directory is closed and then
reopened, prior values returned by
.Fn dirfd
function
returns the integer file descriptor associated with the named
-.Em directory stream
-on success, see
+.Em directory stream ,
+see
.Xr open 2 .
On failure, \-1 is returned and the global variable
.Va errno
(void)closedir(dirp);
return (NOT_FOUND);
.Ed
-.Sh LEGACY SYNOPSIS
-.Fd #include <sys/types.h>
-.Fd #include <dirent.h>
-.Pp
-.In sys/types.h
-is necessary for these functions.
.Sh SEE ALSO
.Xr close 2 ,
.Xr lseek 2 ,
.Xr open 2 ,
.Xr read 2 ,
-.Xr compat 5 ,
.Xr dir 5
.Sh HISTORY
The
-.Fn closedir ,
-.Fn dirfd ,
.Fn opendir ,
.Fn readdir ,
-.Fn rewinddir ,
+.Fn telldir ,
.Fn seekdir ,
+.Fn rewinddir ,
+.Fn closedir ,
and
-.Fn telldir
+.Fn dirfd
functions appeared in
.Bx 4.2 .
+The
+.Fn fdopendir
+function appeared in
+.Fx 8.0 .