\" $NetBSD: dirent.3,v 1.7 2021/08/12 20:25:26 andvar Exp $
\"
\" Copyright (c) 1983, 1991, 1993
\" The Regents of the University of California. All rights reserved.
\"
\" Redistribution and use in source and binary forms, with or without
\" modification, are permitted provided that the following conditions
\" are met:
\" 1. Redistributions of source code must retain the above copyright
\" notice, this list of conditions and the following disclaimer.
\" 2. Redistributions in binary form must reproduce the above copyright
\" notice, this list of conditions and the following disclaimer in the
\" documentation and/or other materials provided with the distribution.
\" 3. Neither the name of the University nor the names of its contributors
\" may be used to endorse or promote products derived from this software
\" without specific prior written permission.
\"
\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
\" SUCH DAMAGE.
\"
\" @(#)dir.5 8.3 (Berkeley) 4/19/94
\"
Dd September 7, 2019
Dt DIRENT 3
Os
Sh NAME
Nm dirent
Nd directory format
Sh SYNOPSIS
In sys/types.h
In sys/dirent.h
Ft mode
Fn DTTOIF "dirtype"
Ft dirtype
Fn IFTODT "mode"
Sh DESCRIPTION
Directories provide a convenient hierarchical method of grouping
files while obscuring the underlying details of the storage medium.
A directory file is differentiated from a plain file
by a flag in its
Xr inode 5
entry.
It consists of records (directory entries) each of which contains
information about a file and a pointer to the file itself.
Directory entries may contain other directories
as well as plain files; such nested directories are referred to as
subdirectories.
A hierarchy of directories and files is formed in this manner
and is called a file system (or referred to as a file system tree).
\" An entry in this tree,
\" nested or not nested,
\" is a pathname.
Pp
Each directory file contains two special directory entries; one is a pointer
to the directory itself
called dot
Ql \&.
and the other a pointer to its parent directory called dot-dot
Ql \&.. .
Dot and dot-dot
are valid pathnames, however,
the system root directory
Ql / ,
has no parent and dot-dot points to itself like dot.
Pp
File system nodes are ordinary directory files on which has
been grafted a file system object, such as a physical disk or a
partitioned area of such a disk.
(See
Xr mount 8 . )
Sh IMPLEMENTATION NOTES
The directory entry format is defined in the file
In sys/dirent.h ,
which is also included by
In dirent.h .
The format is represented by the
Em dirent
structure, which contains the following entries:
Bd -literal -offset indent
ino_t d_fileno;
uint16_t d_reclen;
uint16_t d_namlen;
uint8_t d_type;
char d_name[MAXNAMLEN + 1];
Ed
Pp
These are:
Bl -enum -offset indent
It
The
Fa d_fileno
entry is a number which is unique for each
distinct file in the filesystem.
Files that are linked by hard links (see
Xr link 2 )
have the same
Fa d_fileno .
If
Fa d_fileno
is zero, the entry refers to a deleted file.
The type
Va ino_t
is defined in
In sys/types.h .
It
The
Fa d_reclen
entry is the length, in bytes, of the directory record.
It
The
Fa d_namlen
entry specifies the length of the file name excluding the NUL.
Thus the actual size of
Fa d_name
may vary from 1 to
Dv MAXNAMLEN
\&+ 1.
It
The
Fa d_type
is the type of the file.
It
The
Fa d_name
entry contains a NUL-terminated file name.
El
Pp
The following table lists the types available for
Vt d_type
and the corresponding ones used in the
Em struct stat
(see
Xr stat 2 ) ,
respectively:
Pp
Bl -column -offset indent -compact \
"DT_UNKNOWN " "DT_UNKNOWN " "DT_UNKNOWN "
It Sy Dirent Ta Sy Stat Ta Sy Description
It Dv DT_UNKNOWN Ta - Ta unknown file type
It Dv DT_FIFO Ta Dv S_IFIFO Ta named pipe
It Dv DT_CHR Ta Dv S_IFCHR Ta character device
It Dv DT_DIR Ta Dv S_IFDIR Ta directory
It Dv DT_BLK Ta Dv S_IFBLK Ta block device
It Dv DT_REG Ta Dv S_IFREG Ta regular file
It Dv DT_LNK Ta Dv S_IFLNK Ta symbolic link
It Dv DT_SOCK Ta Dv S_IFSOCK Ta UNIX domain socket
It Dv DT_WHT Ta Dv S_IFWHT Ta dummy Dq whiteout inode
El
Pp
The
Dv DT_WHT
type is internal to the implementation and
should not be seen in normal user applications.
The macros
Fn DTTOIF
and
Fn IFTODT
can be used to convert from
Em struct dirent
types to
Em struct stat
types, and vice versa.
Sh COMPATIBILITY
The
St -p1003.1-2001
standard specifies only the fields
Va d_ino
and
Va d_name .
The remaining fields are available on many, but not all systems.
Pp
Furthermore, the standard leaves the size of
Va d_name
as unspecified, mentioning only that the number of
bytes preceding the terminating NUL shall not exceed
Dv NAME_MAX .
Because of this, and because the
Va d_namlen
field may not be present, a portable application should determine the size of
Va d_name
by using
Xr strlen 3
instead of applying the
Fn sizeof
operator.
Sh SEE ALSO
Xr getdents 2 ,
Xr fs 5 ,
Xr inode 5
\" .Sh STANDARDS
\"
\" XXX: Conformance is unclear, cf. PR lib/43310.
\"
\" Given the noted limitations, the
\".In dirent.h
\" header conforms to
\" .St -p1003.1-2001 .
Sh HISTORY
A
directory file format appeared in
At v1 .
The
Em dirent
structure appeared in
Bx 4.3 reno .