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; 18 int flags; // I_VALID 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 #define I_VALID 0x2 28 29 // table mapping major device number to 30 // device functions 31 struct devsw { 32 int (*read)(struct inode*, char*, int); 33 int (*write)(struct inode*, char*, int); 34 }; 35 36 extern struct devsw devsw[]; 37 38 #define CONSOLE 1 39 40 //PAGEBREAK! 41 // Blank page. 42