DIRREAD(2) DIRREAD(2)
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(2) on a directory is a set of
complete directory entries in a machine-independent format,
exactly equivalent to the result of a stat(2) 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(2) for the lay-
out of a Dir). The array is allocated with malloc(2) 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(2) 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(5) 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
/sys/src/libc/9sys/dirread.c
SEE ALSO
intro(2), open(2), read(2)
Page 1 Plan 9 (printed 10/29/25)
DIRREAD(2) DIRREAD(2)
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/29/25)