xv6, line by line
kernel/file.h

kernel/file.h

C header · 40 lines · annotated 100% · kernel · upstream

Included by 7 fileskernel/console.c, kernel/file.c, kernel/fs.c, kernel/pipe.c, kernel/printk.c, kernel/sysfile.c, user/init.c
About this file

The in-memory structures of the file layer: struct file, one open file (struct file); struct inode, the kernel’s in-memory copy of an inode; and struct devsw, the table that connects device files to their drivers. Their on-disk counterparts are in kernel/fs.h.

kernel/file.c and kernel/fs.c contain the code that manages these structures, and kernel/sysfile.c and kernel/pipe.c use them. The header is also included by user/init.c, which needs the CONSOLE constant to create the console device file.

Read before: kernel/fs.h. Read next: kernel/fs.c, kernel/file.c.

1struct file {
3 int ref; // reference count
4 char readable;
5 char writable;
6 struct pipe *pipe; // FD_PIPE
7 struct inode *ip; // FD_INODE and FD_DEVICE
8 uint off; // FD_INODE
9 short major; // FD_DEVICE
10};
12#define major(dev) ((dev) >> 16 & 0xFFFF)
13#define minor(dev) ((dev) & 0xFFFF)
14#define mkdev(m, n) ((uint)((m) << 16 | (n)))
16// in-memory copy of an inode
17struct inode {
18 uint dev; // Device number
19 uint inum; // Inode number
20 int ref; // Reference count
21 struct sleeplock lock; // protects everything below here
22 int valid; // inode has been read from disk?
24 short type; // copy of disk inode
25 short major;
26 short minor;
27 short nlink;
30};
32// map major device number to device functions.
33struct devsw {
34 int (*read)(int, uint64, int);
35 int (*write)(int, uint64, int);
36};
38extern struct devsw devsw[];
40#define CONSOLE 1