xref: /xv6-public/file.h (revision 4638cabf)
19936bffaSrsc struct file {
2f3685aa3Srsc   enum { FD_NONE, FD_PIPE, FD_INODE } type;
39936bffaSrsc   int ref; // reference count
49936bffaSrsc   char readable;
59936bffaSrsc   char writable;
69936bffaSrsc   struct pipe *pipe;
707090dd7Srsc   struct inode *ip;
89936bffaSrsc   uint off;
99936bffaSrsc };
100aef8914SRuss Cox 
110aef8914SRuss Cox 
12a5fbfe41SRobert Morris // in-memory copy of an inode
130aef8914SRuss Cox struct inode {
140aef8914SRuss Cox   uint dev;           // Device number
150aef8914SRuss Cox   uint inum;          // Inode number
160aef8914SRuss Cox   int ref;            // Reference count
17*70d912b3SRobert Morris   struct sleeplock lock; // protects everything below here
18*70d912b3SRobert Morris   int valid;          // inode has been read from disk?
190aef8914SRuss Cox 
200aef8914SRuss Cox   short type;         // copy of disk inode
210aef8914SRuss Cox   short major;
220aef8914SRuss Cox   short minor;
230aef8914SRuss Cox   short nlink;
240aef8914SRuss Cox   uint size;
250aef8914SRuss Cox   uint addrs[NDIRECT+1];
260aef8914SRuss Cox };
270aef8914SRuss Cox 
28a5fbfe41SRobert Morris // table mapping major device number to
29a5fbfe41SRobert Morris // device functions
300aef8914SRuss Cox struct devsw {
310aef8914SRuss Cox   int (*read)(struct inode*, char*, int);
320aef8914SRuss Cox   int (*write)(struct inode*, char*, int);
330aef8914SRuss Cox };
340aef8914SRuss Cox 
350aef8914SRuss Cox extern struct devsw devsw[];
360aef8914SRuss Cox 
370aef8914SRuss Cox #define CONSOLE 1
38