2021SC@SDUSC
项目环境:
- 树莓派4b
- Ubuntu Desktop 21.04
结构体:
在文件 FileSystem.h 中,声明了实现文件系统的一些重要数据结构:
typedef struct{
unsigned short blockSize;
unsigned int blockNum;
unsigned int inodeNum ;
unsigned int blockFree;
}SuperBlock;
上述结构体中,我们定义了文件块大小 blockSize ,文件块数量 blockNum ,节点数量 inodeNum,以及空闲块数量 blockFree 。
inode:
typedef struct{
unsigned int id;
char name[30];
unsigned char isDir;
unsigned int parent;
unsigned int length;
unsigned char type;
time_t time;
unsigned int addr[12];
unsigned int blockId;
}Inode,*PInode;
在这里,我们用一个结构体 Inode 来刻画一个索引节点的基本信息,包括了它的索引节点编号 id ,用一个 char 类型数组 name 来存储文件名, isDir 变量来存储文件类型, parent 是当前节点的父节点的索引, length 是文件长度, type 是文件权限, 0 代表只读, 1 代表正常的 读写。 Time 变量为文件最后修改时间。最后我们定义 addr 数组来存储文件内容, 文件前 10 项为直接索引,目录前 11 项为直接索引, blockId 为文件所在的目录数据块的 id 。
文件控制块FCB:
typedef struct {
unsigned int id;
char name[30];
unsigned char isDir;
unsigned int blockId;
}Fcb,*PFcb;
紧接着我们用一个结构体来定义 FCB ,它用于唯一标识一个文件的存在。
用户结构体:
typedef struct{
char username[10];//用户名,最大长度9
char password[10];//密码,最大长度9
}User;
这里是用户结构体,分别为用户名 username 以及密码 password 存储于两个数组中。
私有成员:
在属于 FileSystem.h 的私有成员和函数中,有一些极为重要的函数和成员,除文件块数量和大小等我们已经在上面介绍过的重要变量,还有文件块的比特图以及节点的比特图 blockBitmap 和 inodeBitmap 。以及重要的各种偏移量,比如 superBlock 偏移, blockBitmap 偏移, inodeBitmap 偏移, i 节点区偏移,数据区偏移,文件是否运行判别量 isalive 。当前目录字符串 curPath ,当前目录 i 节点 curInode ,当前目录文件指针 curLink 。输入的命令 cmd[5][20] 。
全部私有成员如下:
<