File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / usr / src / man / man5 / dir.5
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:24:19 2019 UTC (7 years ago) by root
Branches: bsd, MAIN
CVS tags: v12b, v121, HEAD
Power 6/32 Unix version 1.2b

.TH DIR 5  "15 January 1983"
.UC 4
.SH NAME
dir \- format of directories
.SH SYNOPSIS
.B #include <sys/types.h>
.br
.B #include <sys/dir.h>
.SH DESCRIPTION
A directory behaves exactly like an ordinary file, save that no
user may write into a directory.
The fact that a file is a directory is indicated by
a bit in the flag word of its i-node entry; see
.IR fs (5).
The structure of a directory entry as given in the include file is:
.RS
.ta 8n +10n +10n
.PP
.nf
/*
 * A directory consists of some number of blocks of
 * DIRBLKSIZ bytes, where DIRBLKSIZ is chosen such that
 * it can be transferred to disk in a single atomic
 * operation (e.g. 512 bytes on most machines).
 * 
 * Each DIRBLKSIZ byte block contains some number of
 * directory entry structures, which are of variable
 * length.  Each directory entry has a struct direct at
 * the front of it, containing its inode number, the
 * length of the entry, and the length of the name con-
 * tained in the entry.  These are followed by the name
 * padded to a 4 byte boundary with null bytes.  All
 * names are guaranteed null terminated.  The maximum
 * length of a name in a directory is MAXNAMLEN.  The
 * macro DIRSIZ(dp) gives the amount of space required
 * to represent a directory entry.  Free space in a
 * directory is represented by entries which have dp-
 * >d_reclen > DIRSIZ(dp).  All DIRBLKSIZ bytes in a
 * directory block are claimed by the directory en-
 * tries.  This usually results in the last entry in a
 * directory having a large dp->d_reclen.  When entries
 * are deleted from a directory, the space is returned
 * to the previous entry in the same directory block by
 * increasing its dp->d_reclen.  If the first entry of
 * a directory block is free, then its dp->d_ino is set
 * to 0.  Entries other than the first in a directory
 * do not normally have dp->d_ino set to 0.
 */
#ifdef KERNEL
#define DIRBLKSIZ DEV_BSIZE
#else
#define	DIRBLKSIZ 512
#endif

#define MAXNAMLEN 255

/*
 * The DIRSIZ macro gives the minimum record length
 * which will hold the directory entry.  This requires
 * the amount of space in struct direct without the
 * d_name field, plus enough space for the name with a
 * terminating null byte (dp->d_namlen+1), rounded up
 * to a 4 byte boundary.
 */
#undef DIRSIZ
#define DIRSIZ(dp) \e
    ((sizeof (struct direct) - (MAXNAMLEN+1)) + \e
    (((dp)->d_namlen+1 + 3) &~ 3))

struct	direct {
	u_long	d_ino;
	short	d_reclen;
	short	d_namlen;
	char	d_name[MAXNAMLEN + 1];
	/* typically shorter */
};

struct _dirdesc {
	int	dd_fd;
	long	dd_loc;
	long	dd_size;
	char	dd_buf[DIRBLKSIZ];
};
.fi
.RE
.PP
By convention, the first two entries in each directory
are for `.' and `..'.  The first is an entry for the
directory itself.  The second is for the parent directory.
The meaning of `..' is modified for the root directory
of the master file system (\*(lq/\*(rq),
where `..' has the same meaning as `.'.
.SH "SEE ALSO"
fs(5)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.