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

📄 filesys.h

📁 操作系统实验,文件系统,c语言实现的
💻 H
字号:
//#define NULL     0 
#define BLOCKSIZ 512 
#define SYSOPENFILE 40 
#define DIRNUM 128 
#define DIRSIZ 14 
#define PWDSIZ 12 
#define PWDNUM 32 
#define NOFILE 20 
#define NADDR 10 
#define NHINO 128   /*  must be power of 2 */ 
#define USERNUM 10 
#define DINODESIZ 32 

/*  filsys  */ 
#define DINODEBLK 32 
#define FILEBLK 512 
#define NICFREE 50 
#define NICINOD 50 
#define DINODESTART 2*BLOCKSIZ 
#define DATASTART (2+DINODEBLK)*BLOCKSIZ 

/* di-mode*/ 
#define DIEMPTY        00000 
#define DIFILE        01000 
#define DIDIR        02000 
#define UDIREAD        00001  /* user */ 
#define UDIWRITE     00002 
#define UDIEXICUTE     00004 
#define GDIREAD        00010  /*group  */ 
#define GDIWRITE     00020 
#define GDIEXICUTE      00040 
#define ODIREAD        00100  /*otfier*/ 
#define ODIWRITE     00200 
#define ODIEXICUTE     00400 
#define READ        1 
#define WRITE       2 
#define EXICUTE    3 
#define DEFAULTMODE     00777 

/* i_flag */ 
#define IUPDATE 00002 

/* s_fmod */ 
#define SUPDATE 00001 

/* f_flag */ 
#define FREAD        00001 
#define FWRITE        00002 
#define FAPPEND        00004 

/* error */ 
#define DISKFULL     65535 

/* fseek origin */ 
#define SEEK_SET    0 

/*文件系统  数据结构*/ 

struct inode{ 
	struct inode *i_forw; 
	struct inode *i_back;   
	char i_flag; 
	unsigned int i_ino;    /*磁盘i节点标志*/ 
	unsigned int i_count;    /*引用计数*/ 
	unsigned short di_number;    /*关联文件数。当为0时,则删除该文件*/ 
	unsigned short di_mode;    /*存取权限*/ 
	unsigned short di_uid; 
	unsigned short di_gid; 
	unsigned int di_size;    /*文件大小*/ 
	unsigned short di_addr[NADDR];    /*物理块号*/ 
}; 

struct dinode{ 
	unsigned short di_number;    /*关联文件数*/ 
	unsigned short di_mode;    /*存取权限*/ 
	unsigned short di_uid; 
	unsigned short di_gid; 
	unsigned int di_size;    /*文件大小*/ 
	unsigned short di_addr[NADDR];    /*物理块号*/ 
}; 

struct direct{ 
	char d_name[DIRSIZ]; 
	unsigned short d_ino; 
}; 

struct filsys{ 
	unsigned short s_isize;        /* i节点块块数*/ 
	unsigned long s_fsize;          /* 数据块块数 */ 
	unsigned int s_nfree;        /* 空闲块 */ 
	unsigned short s_pfree;        /* 空闲块指针 */ 
	unsigned int s_free[NICFREE];    /* 空闲块堆栈 */ 
	unsigned int s_ninode;        /* number of free inode in s_inode*/ 
	unsigned short s_pinode;    /* pointer of the sinode */ 
	unsigned int s_inode[NICINOD];    /* 空闲i节点数组 */ 
	unsigned int s_rinode;    /* remember inode */ 
	char s_fmod;    /*超级块修改标志*/ 
}; 

struct dir{ 
	struct direct direct[DIRNUM]; 
	int size; /* 当前目录大小 */ 
}; 

struct hinode{ 
	struct inode *i_forw;  /* hash表指针*/ 
}; 


struct file{ 
	char f_flag;    /*文件操作标志*/ 
	unsigned int f_count;    /*引用计数*/ 
	struct inode *f_inode;    /*指向内存i节点*/ 
	unsigned long f_off;    /*read/write characterpointer*/ 
}; 

struct user{ 
	unsigned short u_default_mode; 
	unsigned short u_uid; 
	unsigned short u_gid; 
	unsigned short u_ofile[NOFILE];    /*用户打开文件表*/ 
	/*system open file pointer number*/ 
}; 

/*下为全局变量*/ 
extern struct hinode hinode[NHINO]; 
extern struct dir dir;    /*  当前目录(在内存中全部读入)  */ 
extern struct file sys_ofile[SYSOPENFILE]; 
extern struct filsys filsys;    /*  内存中的超级块  */ 
extern struct pwd pwd[PWDNUM]; 
extern struct user user[USERNUM]; 
extern FILE *fd;    /*  the file system column of all the system  */ 
extern struct inode * cur_path_inode; 
extern int user_id,file_block; 

/*  proptype of the sub roution used in the file system  */ 
extern struct inode *iget(); 
extern iput(); 
extern unsigned int balloc(); 
extern bfree();   
extern struct inode *ialloc(); 
extern ifree(); 
extern unsigned int namei(); 
extern unsigned short iname(); 
extern unsigned int access(); 
extern _dir();   
extern dirlt(); 
extern mkdir(); 
extern chdir(); 
extern unsigned short open(); 
extern creat(); 
extern unsigned int read(); 
extern unsigned int write(); 
extern int login(); 
extern logout(); 
extern install(); 
extern format(); 
extern close(); 
extern halt();   

⌨️ 快捷键说明

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