DIRREAD(2)                                             DIRREAD(2)

          dirread, dirreadall - read directory

          #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)

          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.


          intro(2), open(2), read(2)

     Page 1                       Plan 9             (printed 4/13/24)

     DIRREAD(2)                                             DIRREAD(2)

          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 4/13/24)