xref: /xv6-public/file.h (revision 0aef8914)
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 };
10*0aef8914SRuss Cox 
11*0aef8914SRuss Cox 
12*0aef8914SRuss Cox // in-core file system types
13*0aef8914SRuss Cox 
14*0aef8914SRuss Cox struct inode {
15*0aef8914SRuss Cox   uint dev;           // Device number
16*0aef8914SRuss Cox   uint inum;          // Inode number
17*0aef8914SRuss Cox   int ref;            // Reference count
18*0aef8914SRuss Cox   int flags;          // I_BUSY, I_VALID
19*0aef8914SRuss Cox 
20*0aef8914SRuss Cox   short type;         // copy of disk inode
21*0aef8914SRuss Cox   short major;
22*0aef8914SRuss Cox   short minor;
23*0aef8914SRuss Cox   short nlink;
24*0aef8914SRuss Cox   uint size;
25*0aef8914SRuss Cox   uint addrs[NDIRECT+1];
26*0aef8914SRuss Cox };
27*0aef8914SRuss Cox 
28*0aef8914SRuss Cox #define I_BUSY 0x1
29*0aef8914SRuss Cox #define I_VALID 0x2
30*0aef8914SRuss Cox 
31*0aef8914SRuss Cox 
32*0aef8914SRuss Cox // device implementations
33*0aef8914SRuss Cox 
34*0aef8914SRuss Cox struct devsw {
35*0aef8914SRuss Cox   int (*read)(struct inode*, char*, int);
36*0aef8914SRuss Cox   int (*write)(struct inode*, char*, int);
37*0aef8914SRuss Cox };
38*0aef8914SRuss Cox 
39*0aef8914SRuss Cox extern struct devsw devsw[];
40*0aef8914SRuss Cox 
41*0aef8914SRuss Cox #define CONSOLE 1
42