macro and text revision (-mdoc version 3)
[unix-history] / usr / src / lib / libc / gen / directory.3
.\" Copyright (c) 1983, 1991 Regents of the University of California.
.\" All rights reserved.
.\"
.\" %sccs.include.redist.man%
.\"
.\" @(#)directory.3 6.7 (Berkeley) %G%
.\"
.Dd
.Dt DIRECTORY 3
.Os BSD 4.2
.Sh NAME
.Nm opendir ,
.Nm readdir ,
.Nm telldir ,
.Nm seekdir ,
.Nm rewinddir ,
.Nm closedir ,
.Nm dirfd
.Nd directory operations
.Sh SYNOPSIS
.Fd #include <sys/types.h>
.Fd #include <dirent.h>
.Ft DIR *
.Fn opendir "const char *filename"
.Ft struct direct
.Fn readdir "DIR *dirp"
.Ft long
.Fn telldir "const 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 filename ,
associates a
.Em directory stream
with it
and
returns a pointer to be used to identify the
.Em directory stream
in subsequent operations. 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.
.Pp
The
.Fn readdir
function
returns a pointer to the next directory entry. It returns
.Dv NULL
upon reaching the end of the directory or detecting an invalid
.Fn seekdir
operation.
.Pp
The
.Fn telldir
function
returns the current location associated with the named
.Em directory stream .
.Pp
The
.Fn seekdir
function
sets the position of the next
.Fn readdir
operation on the
.Em directory stream .
The new position reverts to the one associated with the
.Em directory stream
when the
.Fn telldir
operation was performed. Values returned by
.Fn telldir
are good only for the lifetime of the
.Dv DIR
pointer,
.Fa dirp ,
from which they are derived.
If the directory is closed and then reopened, the
.Fn telldir
value may be invalidated due to undetected directory compaction.
It is safe to use a previous
.Fn telldir
value immediately after a call to
.Fn opendir
and before any calls to
.Fn readdir .
.Pp
The
.Fn rewinddir
function
resets the position of the named
.Em directory stream
to the beginning of the directory.
.Pp
The
.Fn closedir
function
closes the named
.Em directory stream
and frees the structure associated with the
.Fa dirp
pointer,
returning 0 on success.
On failure, \-1 is returned and the global variable
.Va errno
is set to indicate the error.
.Pp
The
.Fn dirfd
function
returns the integer file descriptor associated with the named
.Em directory stream ,
see
.Xr open 2 .
.Pp
Sample code which searchs a directory for entry ``name'' is:
.Bd -literal -offset indent
len = strlen(name);
dirp = opendir(".");
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
if (dp->d_namlen == len && !strcmp(dp->d_name, name)) {
(void)closedir(dirp);
return FOUND;
}
(void)closedir(dirp);
return NOT_FOUND;
.Ed
.Sh SEE ALSO
.Xr open 2 ,
.Xr close 2 ,
.Xr read 2 ,
.Xr lseek 2 ,
.Xr dir 5
.Sh HISTORY
The
.Fn opendir ,
.Fn readdir ,
.Fn telldir ,
.Fn seekdir ,
.Fn rewinddir ,
.Fn closedir ,
and
.Fn dirfd
functions appeared in
.Bx 4.2 .