Linux文件系统

2021SC@SDUSC

项目环境:

  1. 树莓派4b
  2. 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] 。

全部私有成员如下:

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值