2006-09-06 20:38:56 +02:00
|
|
|
struct file {
|
2009-05-31 04:07:51 +02:00
|
|
|
enum { FD_NONE, FD_PIPE, FD_INODE } type;
|
2006-07-16 04:04:58 +02:00
|
|
|
int ref; // reference count
|
2006-06-27 16:35:53 +02:00
|
|
|
char readable;
|
2006-09-06 20:06:04 +02:00
|
|
|
char writable;
|
2006-06-27 16:35:53 +02:00
|
|
|
struct pipe *pipe;
|
2007-08-24 22:54:23 +02:00
|
|
|
struct inode *ip;
|
2006-08-08 21:58:06 +02:00
|
|
|
uint off;
|
2006-06-27 16:35:53 +02:00
|
|
|
};
|
2009-08-08 10:07:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
// in-core file system types
|
|
|
|
|
|
|
|
struct inode {
|
|
|
|
uint dev; // Device number
|
|
|
|
uint inum; // Inode number
|
|
|
|
int ref; // Reference count
|
2011-08-29 23:18:40 +02:00
|
|
|
int flags; // I_BUSY, I_VALID
|
2009-08-08 10:07:30 +02:00
|
|
|
|
|
|
|
short type; // copy of disk inode
|
|
|
|
short major;
|
|
|
|
short minor;
|
|
|
|
short nlink;
|
|
|
|
uint size;
|
|
|
|
uint addrs[NDIRECT+1];
|
|
|
|
};
|
|
|
|
|
2011-08-29 23:18:40 +02:00
|
|
|
#define I_BUSY 0x1
|
|
|
|
#define I_VALID 0x2
|
2009-08-08 10:07:30 +02:00
|
|
|
|
|
|
|
// device implementations
|
|
|
|
|
|
|
|
struct devsw {
|
|
|
|
int (*read)(struct inode*, char*, int);
|
|
|
|
int (*write)(struct inode*, char*, int);
|
|
|
|
};
|
|
|
|
|
|
|
|
extern struct devsw devsw[];
|
|
|
|
|
|
|
|
#define CONSOLE 1
|