filesystem.h
来自「参照MINIX3写的操作系统 用GCC+NASM+BOCHS开发」· C头文件 代码 · 共 101 行
H
101 行
//#include "../kernel.h"
#define ERROR -1
#define OK 1
#define CLEAR 0
#define DIRTY -1
#define NO_BLOCK -1
#define NO_DEVICE -1
#define NULL 0
#define VIRTUAL_HD_SIZE 1024*1024*1024 //1G
#define BUFFER_SIZE 1024
#define NR_FILE_BUFFER 2*1024//2M
#define NR_HASH_BUFFER 256
#define MASK(a) a&0xFF //哈希函数
//目录的哈希函数
#define DIR_MASK(FatherInodeNumber,Name,Index) int c=0; int f=0;while(Name[c]!='\0'){ f+=Name[c];c++;} Index=(f+FatherInodeNumber)&0xFF;
typedef struct Buffer{
int Count;//该块被引用的次数
char Dirty;//该块是否被修改过
t_8 *Data;//数据缓冲区
int Block;//该块所在的块号
int Device;//该块所在的设备号
struct Buffer *NextFree;//指向下一个空闲块
struct Buffer *PrevFree;//指向前一个空闲块
struct Buffer *Hash;//哈希链指针
struct Buffer *DirtyLink;//修改链指针
}Buffer,*LPBuffer;
typedef struct s_Super{//超级块
t_32 TotalInode;//Inodes总数
t_32 TotalBlock;//块总数
t_32 TotalFreeBlock;//空闲块总数
t_32 TotalFreeInode;//空闲Inode总数
t_16 Magic;//魔数
t_32 FirstFreeBlock;//第一个可用于预分配的空闲块位置
t_32 FirstFreeInode;
}Super,*LPSuper;
#define ZONE_NUMBERS 14
typedef struct s_Inode{
t_16 Mode;//文件类型和访问权限
t_16 UserId;//用户Id
t_16 GroupId;//组Id
t_32 FileSize;//以字节计算的文件大小
t_16 LastAccessTime;//最后一次访问时间
t_16 CreateTime;//创建时间
t_16 StateModefyTime;//状态修改时间
t_32 Blocks;//文件占用的总块数
t_32 Block[ZONE_NUMBERS];//指向数据块的指针数组
t_32 LastBlock;//文件所对应块的最后一块,用作文件扩展分配
t_32 FutuerBlocks;//预分配的文件块大小
t_32 None[11];//暂时用作填充位,为扩展留下空间
}Inode,*LPInode;
/*InodeSize 128bytes*/
#define NR_INODE_BUFFER 1000
#define NR_HASH_INODE 256
#define MASK(a) a&0xFF //哈希函数
//Inode缓冲区
typedef struct InodeBuffer{
t_32 InodeNumber;//Inode号
Inode *FileInode;//文件Inode
int Count;//引用次数
int Dirty;//是否被修改过
struct InodeBuffer *NextFree;//指向下一个空闲块
struct InodeBuffer *PrevFree;//指向前一个空闲块
struct InodeBuffer *Hash;//哈希链指针
}InodeBuffer,*LPInodeBuffer;
#define FILE_NAME_SIZE 28
//目录
typedef struct Directory{
char Name[FILE_NAME_SIZE];//目录名
t_32 InodeNumber;//该目录对应的Inode号
}Directory,*LPDirectory;
//目录缓冲区
typedef struct DirectoryBuffer{
Directory Dir;
t_32 FatherInodeNumber;//父目录的Inode号
struct DirectoryBuffer *Next;//指向下一块
}DirectoryBuffer,*LPDirectoryBuffer;
extern Super glSuper;
extern LPSuper GetSuper();
//#define VIRTUAL_HD_SIZE 100*1024*1024//虚拟磁盘空间定为100M
#define INODE_SIZE sizeof(Inode)//当前为128字节
#define SUPER_SIZE sizeof(Super)
void InitFileBuffer();
void InitInodeBuffer();
void InitDirectoryBuffer();
PUBLIC void initFS();
LPBuffer GetPhysicalBlock(int Block ,int Device);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?