⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs.h

📁 早期linux0.95内核的源代码
💻 H
字号:
/* * This file has definitions for some important file table * structures etc. */#ifndef _FS_H#define _FS_H#include <sys/types.h>/* devices are as follows: (same as minix, so we can use the minix * file system. These are major numbers.) * * 0 - unused (nodev) * 1 - /dev/mem * 2 - /dev/fd * 3 - /dev/hd * 4 - /dev/ttyx * 5 - /dev/tty * 6 - /dev/lp * 7 - unnamed pipes */#define IS_SEEKABLE(x) ((x)>=1 && (x)<=3)#define MAY_EXEC 1#define MAY_WRITE 2#define MAY_READ 4#define READ 0#define WRITE 1#define READA 2		/* read-ahead - don't pause */#define WRITEA 3	/* "write-ahead" - silly, but somewhat useful */void buffer_init(long buffer_end);#define MAJOR(a) (((unsigned)(a))>>8)#define MINOR(a) ((a)&0xff)#define NR_OPEN 20#define NR_INODE 128#define NR_FILE 64#define NR_SUPER 8#define NR_HASH 307#define NR_BUFFERS nr_buffers#define BLOCK_SIZE 1024#define BLOCK_SIZE_BITS 10#ifndef NULL#define NULL ((void *) 0)#endif#define PIPE_READ_WAIT(inode) ((inode).i_wait)#define PIPE_WRITE_WAIT(inode) ((inode).i_wait2)#define PIPE_HEAD(inode) ((inode).i_data[0])#define PIPE_TAIL(inode) ((inode).i_data[1])#define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1))#define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode))#define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1))#define NIL_FILP	((struct file *)0)#define SEL_IN		1#define SEL_OUT		2#define SEL_EX		4typedef char buffer_block[BLOCK_SIZE];struct buffer_head {	char * b_data;			/* pointer to data block (1024 bytes) */	unsigned long b_blocknr;	/* block number */	unsigned short b_dev;		/* device (0 = free) */	unsigned char b_uptodate;	unsigned char b_dirt;		/* 0-clean,1-dirty */	unsigned char b_count;		/* users using this block */	unsigned char b_lock;		/* 0 - ok, 1 -locked */	struct task_struct * b_wait;	struct buffer_head * b_prev;	struct buffer_head * b_next;	struct buffer_head * b_prev_free;	struct buffer_head * b_next_free;};struct inode {	dev_t	i_dev;	ino_t	i_ino;	umode_t	i_mode;	nlink_t	i_nlink;	uid_t	i_uid;	gid_t	i_gid;	dev_t	i_rdev;	off_t	i_size;	time_t	i_atime;	time_t	i_mtime;	time_t	i_ctime;	unsigned long i_data[16];	struct inode_operations * i_op;	struct super_block * i_sb;	struct task_struct * i_wait;	struct task_struct * i_wait2;	/* for pipes */	unsigned short i_count;	unsigned char i_lock;	unsigned char i_dirt;	unsigned char i_pipe;	unsigned char i_mount;	unsigned char i_seek;	unsigned char i_update;};struct file {	unsigned short f_mode;	unsigned short f_flags;	unsigned short f_count;	struct inode * f_inode;	struct file_operations * f_op;	off_t f_pos;};struct super_block {	unsigned short s_ninodes;	unsigned short s_nzones;	unsigned short s_imap_blocks;	unsigned short s_zmap_blocks;	unsigned short s_firstdatazone;	unsigned short s_log_zone_size;	unsigned long s_max_size;	unsigned short s_magic;/* These are only in memory */	struct buffer_head * s_imap[8];	struct buffer_head * s_zmap[8];	unsigned short s_dev;	struct inode * s_covered;	struct inode * s_mounted;	unsigned long s_time;	struct task_struct * s_wait;	unsigned char s_lock;	unsigned char s_rd_only;	unsigned char s_dirt;};struct file_operations {	int (*lseek) (struct inode *, struct file *, off_t, int);	int (*read) (struct inode *, struct file *, char *, int);	int (*write) (struct inode *, struct file *, char *, int);};struct inode_operations {	int (*create) (struct inode *,const char *,int,int,struct inode **);	int (*lookup) (struct inode *,const char *,int,struct inode **);	int (*link) (struct inode *,struct inode *,const char *,int);	int (*unlink) (struct inode *,const char *,int);	int (*symlink) (struct inode *,const char *,int,const char *);	int (*mkdir) (struct inode *,const char *,int,int);	int (*rmdir) (struct inode *,const char *,int);	int (*mknod) (struct inode *,const char *,int,int,int);	int (*rename) (struct inode *,const char *,int,struct inode *,const char *,int);	int (*readlink) (struct inode *,char *,int);	int (*open) (struct inode *, struct file *);	void (*release) (struct inode *, struct file *);	struct inode * (*follow_link) (struct inode *, struct inode *);};extern struct inode inode_table[NR_INODE];extern struct file file_table[NR_FILE];extern struct super_block super_block[NR_SUPER];extern struct buffer_head * start_buffer;extern int nr_buffers;extern void check_disk_change(int dev);extern int floppy_change(unsigned int nr);extern int ticks_to_floppy_on(unsigned int dev);extern void floppy_on(unsigned int dev);extern void floppy_off(unsigned int dev);extern void truncate(struct inode * inode);extern void sync_inodes(void);extern void wait_on(struct inode * inode);extern int bmap(struct inode * inode,int block);extern struct inode * namei(const char * pathname);extern struct inode * lnamei(const char * pathname);extern int open_namei(const char * pathname, int flag, int mode,	struct inode ** res_inode);extern void iput(struct inode * inode);extern struct inode * iget(int dev,int nr);extern struct inode * get_empty_inode(void);extern struct inode * get_pipe_inode(void);extern struct buffer_head * get_hash_table(int dev, int block);extern struct buffer_head * getblk(int dev, int block);extern void ll_rw_block(int rw, struct buffer_head * bh);extern void ll_rw_page(int rw, int dev, int nr, char * buffer);extern void ll_rw_swap_file(int rw, int dev, unsigned int *b, int nb, char *buffer);extern void brelse(struct buffer_head * buf);extern struct buffer_head * bread(int dev,int block);extern void bread_page(unsigned long addr,int dev,int b[4]);extern struct buffer_head * breada(int dev,int block,...);extern int sync_dev(int dev);extern struct super_block * get_super(int dev);extern int ROOT_DEV;extern void mount_root(void);extern int minix_file_read(struct inode *, struct file *, char *, int);extern int pipe_read(struct inode *, struct file *, char *, int);extern int char_read(struct inode *, struct file *, char *, int);extern int block_read(struct inode *, struct file *, char *, int);extern int minix_file_write(struct inode *, struct file *, char *, int);extern int pipe_write(struct inode *, struct file *, char *, int);extern int char_write(struct inode *, struct file *, char *, int);extern int block_write(struct inode *, struct file *, char *, int);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -