xref: /xv6-public/file.h (revision a5fbfe41)
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 
12*a5fbfe41SRobert 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
171ddfbbb1SFrans Kaashoek   int flags;          // I_BUSY, I_VALID
180aef8914SRuss Cox 
190aef8914SRuss Cox   short type;         // copy of disk inode
200aef8914SRuss Cox   short major;
210aef8914SRuss Cox   short minor;
220aef8914SRuss Cox   short nlink;
230aef8914SRuss Cox   uint size;
240aef8914SRuss Cox   uint addrs[NDIRECT+1];
250aef8914SRuss Cox };
261ddfbbb1SFrans Kaashoek #define I_BUSY 0x1
271ddfbbb1SFrans Kaashoek #define I_VALID 0x2
280aef8914SRuss Cox 
29*a5fbfe41SRobert Morris // table mapping major device number to
30*a5fbfe41SRobert Morris // device functions
310aef8914SRuss Cox struct devsw {
320aef8914SRuss Cox   int (*read)(struct inode*, char*, int);
330aef8914SRuss Cox   int (*write)(struct inode*, char*, int);
340aef8914SRuss Cox };
350aef8914SRuss Cox 
360aef8914SRuss Cox extern struct devsw devsw[];
370aef8914SRuss Cox 
380aef8914SRuss Cox #define CONSOLE 1
39