|
|
1.1 ! root 1: .TH DIR 5 "15 January 1983" ! 2: .UC 4 ! 3: .SH NAME ! 4: dir \- format of directories ! 5: .SH SYNOPSIS ! 6: .B #include <sys/types.h> ! 7: .br ! 8: .B #include <sys/dir.h> ! 9: .SH DESCRIPTION ! 10: A directory behaves exactly like an ordinary file, save that no ! 11: user may write into a directory. ! 12: The fact that a file is a directory is indicated by ! 13: a bit in the flag word of its i-node entry; see ! 14: .IR fs (5). ! 15: The structure of a directory entry as given in the include file is: ! 16: .RS ! 17: .ta 8n +10n +10n ! 18: .PP ! 19: .nf ! 20: /* ! 21: * A directory consists of some number of blocks of ! 22: * DIRBLKSIZ bytes, where DIRBLKSIZ is chosen such that ! 23: * it can be transferred to disk in a single atomic ! 24: * operation (e.g. 512 bytes on most machines). ! 25: * ! 26: * Each DIRBLKSIZ byte block contains some number of ! 27: * directory entry structures, which are of variable ! 28: * length. Each directory entry has a struct direct at ! 29: * the front of it, containing its inode number, the ! 30: * length of the entry, and the length of the name con- ! 31: * tained in the entry. These are followed by the name ! 32: * padded to a 4 byte boundary with null bytes. All ! 33: * names are guaranteed null terminated. The maximum ! 34: * length of a name in a directory is MAXNAMLEN. The ! 35: * macro DIRSIZ(dp) gives the amount of space required ! 36: * to represent a directory entry. Free space in a ! 37: * directory is represented by entries which have dp- ! 38: * >d_reclen > DIRSIZ(dp). All DIRBLKSIZ bytes in a ! 39: * directory block are claimed by the directory en- ! 40: * tries. This usually results in the last entry in a ! 41: * directory having a large dp->d_reclen. When entries ! 42: * are deleted from a directory, the space is returned ! 43: * to the previous entry in the same directory block by ! 44: * increasing its dp->d_reclen. If the first entry of ! 45: * a directory block is free, then its dp->d_ino is set ! 46: * to 0. Entries other than the first in a directory ! 47: * do not normally have dp->d_ino set to 0. ! 48: */ ! 49: #ifdef KERNEL ! 50: #define DIRBLKSIZ DEV_BSIZE ! 51: #else ! 52: #define DIRBLKSIZ 512 ! 53: #endif ! 54: ! 55: #define MAXNAMLEN 255 ! 56: ! 57: /* ! 58: * The DIRSIZ macro gives the minimum record length ! 59: * which will hold the directory entry. This requires ! 60: * the amount of space in struct direct without the ! 61: * d_name field, plus enough space for the name with a ! 62: * terminating null byte (dp->d_namlen+1), rounded up ! 63: * to a 4 byte boundary. ! 64: */ ! 65: #undef DIRSIZ ! 66: #define DIRSIZ(dp) \e ! 67: ((sizeof (struct direct) - (MAXNAMLEN+1)) + \e ! 68: (((dp)->d_namlen+1 + 3) &~ 3)) ! 69: ! 70: struct direct { ! 71: u_long d_ino; ! 72: short d_reclen; ! 73: short d_namlen; ! 74: char d_name[MAXNAMLEN + 1]; ! 75: /* typically shorter */ ! 76: }; ! 77: ! 78: struct _dirdesc { ! 79: int dd_fd; ! 80: long dd_loc; ! 81: long dd_size; ! 82: char dd_buf[DIRBLKSIZ]; ! 83: }; ! 84: .fi ! 85: .RE ! 86: .PP ! 87: By convention, the first two entries in each directory ! 88: are for `.' and `..'. The first is an entry for the ! 89: directory itself. The second is for the parent directory. ! 90: The meaning of `..' is modified for the root directory ! 91: of the master file system (\*(lq/\*(rq), ! 92: where `..' has the same meaning as `.'. ! 93: .SH "SEE ALSO" ! 94: fs(5)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.