|
|
1.1 ! root 1: /* inode.h 4.1 11/9/80 */ ! 2: ! 3: /* ! 4: * The I node is the focus of all ! 5: * file activity in unix. There is a unique ! 6: * inode allocated for each active file, ! 7: * each current directory, each mounted-on ! 8: * file, text file, and the root. An inode is 'named' ! 9: * by its dev/inumber pair. (iget/iget.c) ! 10: * Data, from mode on, is read in ! 11: * from permanent inode on volume. ! 12: */ ! 13: ! 14: #define NADDR 13 ! 15: ! 16: #define NINDEX 15 ! 17: struct group ! 18: { ! 19: short g_state; ! 20: char g_index; ! 21: char g_rot; ! 22: struct group *g_group; ! 23: struct inode *g_inode; ! 24: struct file *g_file; ! 25: short g_rotmask; ! 26: short g_datq; ! 27: struct chan *g_chans[NINDEX]; ! 28: }; ! 29: struct inode ! 30: { ! 31: char i_flag; ! 32: char i_count; /* reference count */ ! 33: dev_t i_dev; /* device where inode resides */ ! 34: ino_t i_number; /* i number, 1-to-1 with device address */ ! 35: unsigned short i_mode; ! 36: short i_nlink; /* directory entries */ ! 37: short i_uid; /* owner */ ! 38: short i_gid; /* group of owner */ ! 39: off_t i_size; /* size of file */ ! 40: union { ! 41: struct { ! 42: daddr_t I_addr[NADDR]; /* if normal file/directory */ ! 43: daddr_t I_lastr; /* last read (for read-ahead) */ ! 44: } i_f; ! 45: #define i_addr i_f.I_addr ! 46: #define i_lastr i_f.I_lastr ! 47: struct { ! 48: daddr_t I_rdev; /* i_addr[0] */ ! 49: struct group I_group; /* multiplexor group file */ ! 50: } i_d; ! 51: #define i_rdev i_d.I_rdev ! 52: #define i_group i_d.I_group ! 53: } i_un; ! 54: short i_vfdcnt; /* number of fd's vreading this inode */ ! 55: short i_hlink; /* link in hash chain (iget/iput/ifind) */ ! 56: }; ! 57: ! 58: #ifdef KERNEL ! 59: extern struct inode inode[]; /* The inode table itself */ ! 60: ! 61: struct inode *rootdir; /* pointer to inode of root directory */ ! 62: struct inode *mpxip; /* mpx virtual inode */ ! 63: ! 64: struct inode *ialloc(); ! 65: struct inode *ifind(); ! 66: struct inode *iget(); ! 67: struct inode *owner(); ! 68: struct inode *maknode(); ! 69: struct inode *namei(); ! 70: #endif ! 71: ! 72: /* flags */ ! 73: #define ILOCK 01 /* inode is locked */ ! 74: #define IUPD 02 /* file has been modified */ ! 75: #define IACC 04 /* inode access time to be updated */ ! 76: #define IMOUNT 010 /* inode is mounted on */ ! 77: #define IWANT 020 /* some process waiting on lock */ ! 78: #define ITEXT 040 /* inode is pure text prototype */ ! 79: #define ICHG 0100 /* inode has been changed */ ! 80: #define IPIPE 0200 /* inode is a pipe */ ! 81: ! 82: /* modes */ ! 83: #define IFMT 0170000 /* type of file */ ! 84: #define IFDIR 0040000 /* directory */ ! 85: #define IFCHR 0020000 /* character special */ ! 86: #define IFBLK 0060000 /* block special */ ! 87: #define IFREG 0100000 /* regular */ ! 88: #define IFMPC 0030000 /* multiplexed char special */ ! 89: #define IFMPB 0070000 /* multiplexed block special */ ! 90: #define ISUID 04000 /* set user id on execution */ ! 91: #define ISGID 02000 /* set group id on execution */ ! 92: #define ISVTX 01000 /* save swapped text even after use */ ! 93: #define IREAD 0400 /* read, write, execute permissions */ ! 94: #define IWRITE 0200 ! 95: #define IEXEC 0100
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.