1 struct file { 2 enum { FD_NONE, FD_PIPE, FD_INODE } type; 3 int ref; // reference count 4 char readable; 5 char writable; 6 struct pipe *pipe; 7 struct inode *ip; 8 uint off; 9 }; 10 11 12 // in-memory copy of an inode 13 struct inode { 14 uint dev; // Device number 15 uint inum; // Inode number 16 int ref; // Reference count 17 struct sleeplock lock; // protects everything below here 18 int valid; // inode has been read from disk? 19 20 short type; // copy of disk inode 21 short major; 22 short minor; 23 short nlink; 24 uint size; 25 uint addrs[NDIRECT+1]; 26 }; 27 28 // table mapping major device number to 29 // device functions 30 struct devsw { 31 int (*read)(struct inode*, char*, int); 32 int (*write)(struct inode*, char*, int); 33 }; 34 35 extern struct devsw devsw[]; 36 37 #define CONSOLE 1 38