.\" Copyright (C) 1995 Andries Brouwer (aeb@cwi.nl)
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" Written 11 June 1995 by Andries Brouwer <aeb@cwi.nl>
.\" Modified 22 July 1995 by Michael Chastain <mec@duracef.shout.net>:
.\"   In 1.3.X, returns only one entry each time; return value is different.
.\" Modified 2004-12-01, mtk, fixed headers listed in SYNOPSIS
.\"
.TH READDIR 2  2021-03-22 "Linux" "Linux Programmer's Manual"
.SH NAME
readdir \- read directory entry
.SH SYNOPSIS
.nf
.PP
.BI "int readdir(unsigned int " fd ", struct old_linux_dirent *" dirp ","
.BI "            unsigned int " count );
.fi
.PP
.IR Note :
There is no glibc wrapper for this system call; see NOTES.
.SH DESCRIPTION
This is not the function you are interested in.
Look at
.BR readdir (3)
for the POSIX conforming C library interface.
This page documents the bare kernel system call interface,
which is superseded by
.BR getdents (2).
.PP
.BR readdir ()
reads one
.I old_linux_dirent
structure from the directory
referred to by the file descriptor
.I fd
into the buffer pointed to by
.IR dirp .
The argument
.I count
is ignored; at most one
.I old_linux_dirent
structure is read.
.PP
The
.I old_linux_dirent
structure is declared (privately in Linux kernel file
.BR fs/readdir.c )
as follows:
.PP
.in +4n
.EX
struct old_linux_dirent {
    unsigned long d_ino;     /* inode number */
    unsigned long d_offset;  /* offset to this \fIold_linux_dirent\fP */
    unsigned short d_namlen; /* length of this \fId_name\fP */
    char  d_name[1];         /* filename (null\-terminated) */
}
.EE
.in
.PP
.I d_ino
is an inode number.
.I d_offset
is the distance from the start of the directory to this
.IR old_linux_dirent .
.I d_reclen
is the size of
.IR d_name ,
not counting the terminating null byte (\(aq\e0\(aq).
.I d_name
is a null-terminated filename.
.SH RETURN VALUE
On success, 1 is returned.
On end of directory, 0 is returned.
On error, \-1 is returned, and
.I errno
is set to indicate the error.
.SH ERRORS
.TP
.B EBADF
Invalid file descriptor
.IR fd .
.TP
.B EFAULT
Argument points outside the calling process's address space.
.TP
.B EINVAL
Result buffer is too small.
.TP
.B ENOENT
No such directory.
.TP
.B ENOTDIR
File descriptor does not refer to a directory.
.SH CONFORMING TO
This system call is Linux-specific.
.SH NOTES
Glibc does not provide a wrapper for this system call; call it using
.BR syscall (2).
You will need to define the
.I old_linux_dirent
structure yourself.
However, probably you should use
.BR readdir (3)
instead.
.PP
This system call does not exist on x86-64.
.SH SEE ALSO
.BR getdents (2),
.BR readdir (3)
