📄 filsys.h
字号:
/************************************************/
/* */
/* filsys.h */
/* */
/************************************************/
#define BLOCKSIZ 512 /* 磁盘块大小 */
#define MAXBLOCK 2048 /* 磁盘总块数 */
#define SYSOPENFILE 40 /* 系统打开表最大数 */
#define DIRNUM 128 /* 文件数目 */
#define DIRSIZ 14 /* 文件名长度 */
#define USERNAMESIZ 12 /* 用户名长度 */
#define PWDSIZ 12 /* 密码长度 */
#define PWDNUM 32 /* 允许密码个数 */
#define NOFILE 16 /* 用户打开表最大数 */
#define NADDR 13 /* 物理块号数 */
#define NHINO 64 /* 查找内存i节点的Hash表桶数 */
#define USERNUM 8 /* 允许的最大用户数 */
#define DINODESIZ 64 /* 磁盘i节点大小 */
/* filsys */
#define DINODEBLK 128 /* 磁盘i节点占用盘块数 */
#define FILEBLK MAXBLOCK - DINODEBLK -2 /* 文件区占用磁盘块数 */
#define NICFREE 50 /* 空闲块堆栈可装入的物理块数 */
#define NICINOD 50 /* 空闲磁盘i节点堆栈可装入的i节点数 */
#define DINODESTART 2 * BLOCKSIZ /* 磁盘i节点开始地址 */
#define DATASTART (2 + DINODEBLK) * BLOCKSIZ /* 文件区开始地址 */
/* di_mode */
#define DIEMPTY 000000 /* 空闲磁盘i节点 */
#define DIREG 001000 /* 普通文件 */
#define DIDIR 002000 /* 子目录文件 */
#define UDIREAD 000001 /* 文件主“读”权限 */
#define UDIWRITE 000002 /* 文件主“写”权限 */
#define UDIEXICUTE 000004 /* 文件主“执行”权限 */
#define GDIREAD 000010 /* 同组用户“读”权限 */
#define GDIWRITE 000020 /* 同组用户“写”权限 */
#define GDIEXICUTE 000040 /* 同组用户“执行”权限 */
#define ODIREAD 000100 /* 其它用户“读”权限 */
#define ODIWRITE 000200 /* 其它用户“写”权限 */
#define ODIEXICUTE 000400 /* 其它用户“执行”权限 */
#define READ 000001 /* 文件“读打开”标志 */
#define WRITE 000002 /* 文件“写打开”标志 */
#define EXICUTE 000004 /* 文件“执行”标志 */
/* 超级用户权限,对所有文件可进行所有操作 */
#define SUPERMODE 000777
/* 一般用户“默认”模式,对其它文件可“读”,对自己的文件可“写”可“执行” */
#define NORMALMODE 000117
/* 文件或目录的默认”模式,所有用户均可“读”,文件主可“写” */
#define DEFAULTMODE 000113
/* i_flag */
//#define IUPDATE 00002
/* 超级块 */
//#define SUPDATE 00001
/* f_flag */
//#define FREAD 00001
//#define FWRITE 00002
//#define FAPPEND 00004
/* openmode */
#define O_RDONLY 000001 /* 只读 */
#define O_WRONLY 000002 /* 只写 */
#define O_RDWR 000003 /* 读/写 */
#define O_APPEND 010000 /* 读/写指针指到文件尾 */
#define O_TRUNC 020000 /* 如果文件存在,清空文件 */
#define O_CREAT 040000 /* 如果文件不存在,创建文件 */
#define ROOTDIR 2 /* 根目录所在磁盘i节点号 */
//#define DISKFULL 0xffffffff /* 磁盘满出错 */
#define SEEK_SET 0 /* fseek调用参数,指针指向文件首 */
/* 文件系统(内存i节点)数据结构 */
struct inode
{
struct inode * i_forw; /* 前向指针 */
struct inode * i_back; /* 后向指针 */
// char i_flag; /* 状态标志 */
unsigned int i_ino; /* 磁盘i节点标志 */
unsigned int i_count; /* 引用计数 */
unsigned short i_number; /* 关联文件数,当为0时,则删除该文件 */
unsigned short i_mode; /* 文件属性与存取权限 */
unsigned short i_uid; /* 文件主标识 */
unsigned short i_gid; /* 同组用户标识 */
unsigned short i_size; /* 文件大小 */
unsigned int i_addr[NADDR]; /* 物理块号 */
};
/* 磁盘i节点数据结构 */
struct dinode
{
/* 磁盘i节点的所有变量在内存i节点中都有相应的变量与之相适应 */
unsigned short di_number; /* 关联文件数 */
unsigned short di_mode; /* 文件属性与存取权限 */
unsigned short di_uid; /* 文件主标识 */
unsigned short di_gid; /* 同组用户标识 */
unsigned short di_size; /* 文件大小 */
unsigned int di_addr[NADDR]; /* 物理块号 */
};
/* 查找内存i节点的hash表数据结构 */
struct hinode
{
struct inode * i_forw; /* hash 表指针 */
};
/* 超级块数据结构 */
struct filsys
{
unsigned int s_ninode; /* 空闲磁盘i节点数 */
// unsigned short s_isize; /* 磁盘i节点块块数 */
// unsigned long s_fsize; /* 文件区占用磁盘块数 */
unsigned int s_nfree; /* 空闲盘块数 */
unsigned short s_pfree; /* 空闲盘块指针 */
unsigned short s_pinode; /* 空闲磁盘i节点栈指针 */
unsigned int s_rinode; /* 铭记磁盘i节点,记录下一组要装入的磁盘i节点号 */
unsigned int s_free[NICFREE]; /* 空闲盘块堆栈 */
unsigned int s_inode[NICINOD]; /* 空闲磁盘i节点堆栈 */
// char s_fmod; /* 超级块修改标志 */
};
/* 目录数据结构 */
struct direct
{
char d_name[DIRSIZ]; /* 文件名 */
unsigned short d_ino; /* 磁盘i节点号 */
};
#define DIRECTSIZ sizeof( struct direct ) /* 目录结构长度 */
/* 目录数据结构 */
struct dir
{
struct direct direct[DIRNUM]; /* 目录项 */
unsigned short size; /* 当前目录大小 */
};
/* 系统打开表数据结构 */
struct file
{
char f_flag; /* 文件操作标志 */
unsigned int f_count; /* 引用计数 */
struct inode * f_inode; /* 指向内存i节点 */
unsigned long f_off; /* 读/写指针 */
};
/* 用户打开表数据结构 */
struct user
{
char u_name[USERNAMESIZ]; /* 用户名,登陆时用 */
char password[PWDSIZ]; /* 用户密码,登陆时用 */
unsigned short u_default_mode; /* 用户默认模式 */
unsigned short u_uid; /* 用户标志 */
unsigned short u_gid; /* 用户组标志 */
unsigned short u_ofile[NOFILE]; /* 用户打开文件表 */
};
/* 下为全局变量 */
extern struct hinode hinode[NHINO]; /* 查找内存i节点的hash表 */
extern struct dir dir; /* 当前目录(在内存中全部读入) */
extern struct file sys_ofile[SYSOPENFILE]; /* 系统打开表 */
extern struct filsys filsys; /* 内存中的超级块 */
extern struct user user[USERNUM]; /* 登陆用户表 */
extern FILE *fd; /* 本系统的所有文件指针 */
extern struct inode * cur_path_inode; /* 当前目录路径 */
extern int user_id; /* 当前用户的ID */
extern char cur_path_name[DIRSIZ];
extern struct direct cur_direct[NOFILE]; /* 路径 */
extern unsigned short cur_dir_id; /* 当前目录指针 */
extern struct inode * iget(); /* i节点内容获取函数 */
extern iput(); /* i节点内容释放函数 */
extern unsigned int balloc(); /* 磁盘块分配函数 */
extern bfree(); /* 磁盘块释放函数 */
extern struct inode * ialloc(); /* 分配i节点区函数 */
extern ifree(); /* 释放i节点区函数 */
extern unsigned int namei(); /* 目录搜索函数 */
extern unsigned short iname(); /* 搜索当前目录下文件的函数 */
extern unsigned short access(); /* 访问控制函数 */
extern _dir(); /* 显示目录和文件函数 */
extern mkdir(); /* 目录创建函数 */
extern chdir(); /* 更改目录函数 */
extern getdir(); /* 取得当前目录函数 */
extern putdir(); /* 回写目录函数 */
extern int open(); /* 打开文件函数 */
extern creat(); /* 创建文件函数 */
extern int read(); /* 读文件函数 */
extern int write(); /* 写文件函数 */
extern reg(); /* 用户注册函数 */
extern int login(); /* 用户登陆函数 */
extern logout(); /* 用户退出函数 */
extern init(); /* 初始化文件系统函数 */
extern format(); /* 格式化文件系统函数 */
extern close(); /* 关闭文件函数 */
extern halt(); /* 退出文件系统函数 */
//extern char * username;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -