File:  [DragonFly] / src / share / man / man5 / dir.5
Revision 1.3: download - view: text, annotated - select for diffs
Sun Nov 9 02:34:03 2003 UTC (10 years, 10 months ago) by dillon
Branches: MAIN
CVS tags: HEAD
Core integer types header file reorganization stage 2/2:

Adjust main source files to reflect stdint.h and other changes.  Primarily
this means getting rid of the _BSD_XXX type useage but in some cases,
such as for tar, it means getting rid of #define overrides for intmax_t
and uintmax_t.

    1: .\" Copyright (c) 1983, 1991, 1993
    2: .\"	The Regents of the University of California.  All rights reserved.
    3: .\"
    4: .\" Redistribution and use in source and binary forms, with or without
    5: .\" modification, are permitted provided that the following conditions
    6: .\" are met:
    7: .\" 1. Redistributions of source code must retain the above copyright
    8: .\"    notice, this list of conditions and the following disclaimer.
    9: .\" 2. Redistributions in binary form must reproduce the above copyright
   10: .\"    notice, this list of conditions and the following disclaimer in the
   11: .\"    documentation and/or other materials provided with the distribution.
   12: .\" 3. All advertising materials mentioning features or use of this software
   13: .\"    must display the following acknowledgement:
   14: .\"	This product includes software developed by the University of
   15: .\"	California, Berkeley and its contributors.
   16: .\" 4. Neither the name of the University nor the names of its contributors
   17: .\"    may be used to endorse or promote products derived from this software
   18: .\"    without specific prior written permission.
   19: .\"
   20: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   21: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   22: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   23: .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   24: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   25: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   26: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   27: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   28: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   29: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   30: .\" SUCH DAMAGE.
   31: .\"
   32: .\"     @(#)dir.5	8.3 (Berkeley) 4/19/94
   33: .\" $FreeBSD: src/share/man/man5/dir.5,v 1.12.2.5 2001/12/17 11:30:13 ru Exp $
   34: .\" $DragonFly: src/share/man/man5/dir.5,v 1.3 2003/11/09 02:34:03 dillon Exp $
   35: .\"
   36: .Dd April 19, 1994
   37: .Dt DIR 5
   38: .Os
   39: .Sh NAME
   40: .Nm dir ,
   41: .Nm dirent
   42: .Nd directory file format
   43: .Sh SYNOPSIS
   44: .In dirent.h
   45: .Sh DESCRIPTION
   46: Directories provide a convenient hierarchical method of grouping
   47: files while obscuring the underlying details of the storage medium.
   48: A directory file is differentiated from a plain file
   49: by a flag in its
   50: .Xr inode 5
   51: entry.
   52: It consists of records (directory entries) each of which contains
   53: information about a file and a pointer to the file itself.
   54: Directory entries may contain other directories
   55: as well as plain files; such nested directories are referred to as
   56: subdirectories.
   57: A hierarchy of directories and files is formed in this manner
   58: and is called a file system (or referred to as a file system tree).
   59: .\" An entry in this tree,
   60: .\" nested or not nested,
   61: .\" is a pathname.
   62: .Pp
   63: Each directory file contains two special directory entries; one is a pointer
   64: to the directory itself
   65: called dot
   66: .Ql .\&
   67: and the other a pointer to its parent directory called dot-dot
   68: .Ql \&.. .
   69: Dot and dot-dot
   70: are valid pathnames, however,
   71: the system root directory
   72: .Ql / ,
   73: has no parent and dot-dot points to itself like dot.
   74: .Pp
   75: File system nodes are ordinary directory files on which has
   76: been grafted a file system object, such as a physical disk or a
   77: partitioned area of such a disk.
   78: (See
   79: .Xr mount 2
   80: and
   81: .Xr mount 8 . )
   82: .Pp
   83: The directory entry format is defined in the file
   84: .Aq sys/dirent.h
   85: (which should not be included directly by applications):
   86: .Bd -literal
   87: #ifndef	_SYS_DIRENT_H_
   88: #define	_SYS_DIRENT_H_
   89: 
   90: #include <machine/stdint.h>
   91: 
   92: /*
   93:  * The dirent structure defines the format of directory entries returned by
   94:  * the getdirentries(2) system call.
   95:  *
   96:  * A directory entry has a struct dirent at the front of it, containing its
   97:  * inode number, the length of the entry, and the length of the name
   98:  * contained in the entry.  These are followed by the name padded to a 4
   99:  * byte boundary with null bytes.  All names are guaranteed null terminated.
  100:  * The maximum length of a name in a directory is MAXNAMLEN.
  101:  */
  102: 
  103: struct dirent {
  104: 	__uint32_t d_fileno;		/* file number of entry */
  105: 	__uint16_t d_reclen;		/* length of this record */
  106: 	__uint8_t  d_type; 		/* file type, see below */
  107: 	__uint8_t  d_namlen;		/* length of string in d_name */
  108: #ifdef _POSIX_SOURCE
  109: 	char	d_name[255 + 1];	/* name must be no longer than this */
  110: #else
  111: #define	MAXNAMLEN	255
  112: 	char	d_name[MAXNAMLEN + 1];	/* name must be no longer than this */
  113: #endif
  114: };
  115: 
  116: /*
  117:  * File types
  118:  */
  119: #define	DT_UNKNOWN	 0
  120: #define	DT_FIFO		 1
  121: #define	DT_CHR		 2
  122: #define	DT_DIR		 4
  123: #define	DT_BLK		 6
  124: #define	DT_REG		 8
  125: #define	DT_LNK		10
  126: #define	DT_SOCK		12
  127: #define	DT_WHT		14
  128: 
  129: /*
  130:  * Convert between stat structure types and directory types.
  131:  */
  132: #define	IFTODT(mode)	(((mode) & 0170000) >> 12)
  133: #define	DTTOIF(dirtype)	((dirtype) << 12)
  134: 
  135: /*
  136:  * The _GENERIC_DIRSIZ macro gives the minimum record length which will hold
  137:  * the directory entry.  This requires the amount of space in struct direct
  138:  * without the d_name field, plus enough space for the name with a terminating
  139:  * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
  140:  */
  141: #define	_GENERIC_DIRSIZ(dp) \
  142:     ((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
  143: 
  144: #ifdef _KERNEL
  145: #define	GENERIC_DIRSIZ(dp)	_GENERIC_DIRSIZ(dp)
  146: #endif
  147: 
  148: #endif /* !_SYS_DIRENT_H_ */
  149: .Ed
  150: .Sh SEE ALSO
  151: .Xr fs 5 ,
  152: .Xr inode 5
  153: .Sh BUGS
  154: The usage of the member d_type of struct dirent is unportable as it is
  155: .Fx Ns -specific .
  156: It also may fail on certain filesystems, for example the cd9660 filesystem.
  157: .Sh HISTORY
  158: A
  159: .Nm
  160: file format appeared in
  161: .At v7 .