DIRREAD(3) DIRREAD(3)
NAME
dirread, dirreadall - read directory
SYNOPSIS
#include <u.h>
#include <libc.h>
long dirread(int fd, Dir **buf)
long dirreadall(int fd, Dir **buf)
#define STATMAX 65535U
#define DIRMAX (sizeof(Dir)+STATMAX)
DESCRIPTION
The data returned by a read(3) on a directory is a set of
complete directory entries in a machine-independent format,
exactly equivalent to the result of a stat(3) on each file
or subdirectory in the directory. Dirread decodes the
directory entries into a machine-dependent form. It reads
from fd and unpacks the data into an array of Dir structures
whose address is returned in *buf (see stat(3) for the lay-
out of a Dir). The array is allocated with malloc(3) each
time dirread is called.
Dirreadall is like dirread, but reads in the entire direc-
tory; by contrast, dirread steps through a directory one
read(3) at a time.
Directory entries have variable length. A successful read
of a directory always returns an integral number of complete
directory entries; dirread always returns complete Dir
structures. See read(9p) for more information.
The constant STATMAX is the maximum size that a directory
entry can occupy. The constant DIRMAX is an upper limit on
the size necessary to hold a Dir structure and all the asso-
ciated data.
Dirread and dirreadall return the number of Dir structures
filled in buf. The file offset is advanced by the number of
bytes actually read.
SOURCE
/usr/local/plan9/src/lib9/dirread.c
SEE ALSO
intro(3), open(3), read(3)
Page 1 Plan 9 (printed 10/25/25)
DIRREAD(3) DIRREAD(3)
DIAGNOSTICS
Dirread and Dirreadall return zero for end of file and a
negative value for error. In either case, *buf is set to
nil so the pointer can always be freed with impunity.
These functions set errstr.
Page 2 Plan 9 (printed 10/25/25)