⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesystem.h

📁 操作系统课程设计
💻 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 + -