getdirentries(2)
NAME
- getdirentries, getdents - get directory entries in a file
- system independent format
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <sys/types.h> #include <dirent.h> int getdirentries(int fd, char *buf, int nbytes, long *basep); int getdents(int fd, char *buf, int nbytes);
DESCRIPTION
- The getdirentries() and getdents() system calls read direc
- tory entries
from the directory referenced by the file descriptor fd into - the buffer
pointed to by buf, in a file system independent format. Up - to nbytes of
data will be transferred. The nbytes argument must be - greater than or
equal to the block size associated with the file, see - stat(2). Some file
systems may not support these system calls with buffers - smaller than this
size. - The data in the buffer is a series of dirent structures each
- containing
the following entries:
u_int32_t d_fileno;
u_int16_t d_reclen;
u_int8_t d_type;
u_int8_t d_namlen;
char d_name[MAXNAMELEN + 1]; /* see below */- The d_fileno entry is a number which is unique for each dis
- tinct file in
the file system. Files that are linked by hard links (see - link(2)) have
the same d_fileno. The d_reclen entry is the length, in - bytes, of the
directory record. The d_type entry is the type of the file - pointed to by
the directory record. The file type values are defined in
<sys/dirent.h>. The d_name entry contains a null terminated - file name.
The d_namlen entry specifies the length of the file name ex - cluding the
null byte. Thus the actual size of d_name may vary from 1 - to MAXNAMELEN
+ 1. - Entries may be separated by extra space. The d_reclen entry
- may be used
as an offset from the start of a dirent structure to the - next structure,
if any. - The actual number of bytes transferred is returned. The
- current position
pointer associated with fd is set to point to the next block - of entries.
The pointer may not advance by the number of bytes returned - by
getdirentries() or getdents(). A value of zero is returned - when the end
of the directory has been reached. - The getdirentries() system call writes the position of the
- block read
into the location pointed to by basep. Alternatively, the - current position pointer may be set and retrieved by lseek(2). The cur
- rent position
pointer should only be set to a value returned by lseek(2), - a value
returned in the location pointed to by basep - (getdirentries() only) or
zero.
RETURN VALUES
- If successful, the number of bytes actually transferred is
- returned.
Otherwise, -1 is returned and the global variable errno is - set to indicate the error.
ERRORS
The getdirentries() system call will fail if:
- [EBADF] The fd argument is not a valid file de
- scriptor open
- for reading.
- [EFAULT] Either buf or basep point outside the al
- located
- address space.
- [EINVAL] The file referenced by fd is not a direc
- tory, or
- nbytes is too small for returning a di
- rectory entry or
block of entries, or the current position - pointer is
invalid. - [EIO] An I/O error occurred while reading from
- or writing to
- the file system.
SEE ALSO
HISTORY
- The getdirentries() system call first appeared in 4.4BSD.
- The getdents()
system call first appeared in FreeBSD 3.0. - BSD May 3, 1995