.\" $NetBSD: dirent.3,v 1.4 2011/04/08 08:50:52 wiz 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 May 16, 2010 .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 dir structure appeared in .At v7 . The .Em dirent structure appeared in .Nx 1.3 .