The
opendir
function
opens the directory named by
filename,
associates a
directory stream
with it
and
returns a pointer to be used to identify the
directory stream
in subsequent operations.
The pointer
NULL
is returned if
filename
cannot be accessed, or if it cannot
malloc(3)
enough memory to hold the whole thing.
The
readdir
function
returns a pointer to the next directory entry.
It returns
NULL
upon reaching the end of the directory or detecting an invalid
seekdir
operation.
The
readdir_r
function
provides the same functionality as
readdir,
but the caller must provide a directory
entry
buffer to store the results in.
If the read succeeds,
result
is pointed at the
entry;
upon reaching the end of the directory
result
is set to
NULL.
The
readdir_r
function
returns 0 on success or an error number to indicate failure.
The
telldir
function
returns the current location associated with the named
directory stream.
Values returned by
telldir
are good only for the lifetime of the
DIR
pointer,
dirp,
from which they are derived.
If the directory is closed and then
reopened, prior values returned by
telldir
will no longer be valid.
The
seekdir
function
sets the position of the next
readdir
operation on the
directory stream.
The new position reverts to the one associated with the
directory stream
when the
telldir
operation was performed.
The
rewinddir
function
resets the position of the named
directory stream
to the beginning of the directory.
The
closedir
function
closes the named
directory stream
and frees the structure associated with the
dirp
pointer,
returning 0 on success.
On failure, -1 is returned and the global variable
errno
is set to indicate the error.
The
dirfd
function
returns the integer file descriptor associated with the named
directory stream,
see
open(2).
Sample code which searches a directory for entry name is:
len = strlen(name);
dirp = opendir(".");
while ((dp = readdir(dirp)) != NULL)
if (dp->d_namlen == len && !strcmp(dp->d_name, name)) {
(void)closedir(dirp);
return FOUND;
}
(void)closedir(dirp);
return NOT_FOUND;