📄 filesystem.h
字号:
#ifndef _FILESYSTEM_H_
#define _FILESYSTEM_H_
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
const unsigned FILESYSCAP = 1024 * 1024; //模拟文件系统的容量设为1M
const unsigned BITMAPLEN = 64; //位示图的长度
const unsigned FILEBLOCKCAP = 512; //一个文件块的大小
const unsigned FILEBLOCKCOU = 512; //文件系统中文件块的数量
const unsigned MAXFILENAMELEN = 11; //最长文件名的长度
const unsigned MAXPASSWORDLEN = 11; //用户密码的最大长度
const unsigned USERTESTLOGINCOU = 5; //用户登录尝试次数
const unsigned COMMANDMAXLEN = 200; //命令行最大长度
const unsigned PROSETCOMMCOU = 11; //预设命令数
const char *PROSETCOMM[] = {
"create",
"open",
"read",
"write",
"close",
"delete",
"mkdir",
"cd",
"dir",
"logout",
"copy"
};
//文件元素可供操作性权限
typedef enum
{
pub, //任何人可做任何操作
protect, //非创建者或ADMIN,只可以察看
pri //非创建者或ADMIN,不可以做任何操作
} FEAccess;
//文件元素类型
typedef enum
{
file, //文件
dir //文件夹
} FEType;
//用户类型
typedef enum
{
admin, //管理者,拥用所有权限
comm //一般用户
} UserType;
//文件状态
typedef enum
{
closed,
opened,
reading,
writing
} FileStatus;
//一个文件索引结构
typedef struct
{
unsigned Index; //文件元素索引编号
char FileName[MAXFILENAMELEN]; //文件元素名
char ParentName[MAXFILENAMELEN]; //父节点名
unsigned FileBlockId; //文件元素所在物理块编号
unsigned FileLevel; //文件元素所在层次,层+文件元素名为一个文件元素的逻辑位置
unsigned effect; //是否有效,0-无效,1-有效
} FileIndexElement;
//文件索引结构
typedef struct
{
FileIndexElement *FIStart; //文件系统中的文件索引起始位置
unsigned FILen; //文件索引的最大长度
unsigned FICount; //文件索引数量
} FileIndex;
//文件块的结构
typedef struct fb
{
unsigned FileBlockId; //文件块编号
unsigned FileBlockCap; //文件块的容量
char *FileBlockAddr; //文件块地址
struct fb *next; //下一个文件块的地址
} FileBlock;
//文件系统的位示图结构
typedef struct
{
unsigned BitMapLen; //文件位示图长度
char *BMStart; //位示图的起始指针
} BitMap;
//文件系统结构
typedef struct
{
char *FSStart; //文件系统的起始地址
unsigned FileSystemCap; //文件系统的容量
BitMap bm; //文件系统中的位示图
unsigned FileBlockCou; //文件系统中文件块的数量
FileBlock *head; //文件系统中文件块首地址
FileIndex FI; //文件系统中的文件索引
} FileSystem;
typedef struct
{
char *UserName; //用户名称
UserType ut; //用户类型
} User;
//文件系统中的元素结构,包括文件和文件夹
typedef struct fse
{
struct fse *parent; //指向自己的父亲节点
unsigned FileLevel; //文件元素所在层次,层+文件元素名为一个文件元素的逻辑位置
char FileName[MAXFILENAMELEN]; //文件元素名
unsigned FileBlockId; //文件元素所在物理块编号
unsigned FileElemLen; //文件元素的长度
FEType Type; //文件元素类型
FEAccess Access; //文件元素可供操作的权限
User Creator; //文件创建者
char CreateTime[18]; //创建时间,日期格式:MM/DD/YY HH:MI:SS
char LastModTime[18]; //最后一次修改时间
char *FileData; //一个文件的数据开始地址,文件夹时该值为NULL
FileStatus fileStu; //如果是一个文件表示文件当前的状态
} FSElement;
//系统当前状态
typedef struct
{
User CurrentUser; //当前用户
unsigned FileLevel; //用户所在文件系统层
FSElement *CurrParent; //当前层的父节点
char *CurrentPath; //当前路径
} CurrentStatus;
FileSystem FS; //一个全局文件系统的变量
CurrentStatus CS; //当前系统状态
FSElement *base; //文件元素的根
bool InitFileSys();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -