操作系统课程设计--模拟文件管理系统内容摘要:

m FileStatus { closed, opened, reading, writing }。 //一个文件索引结构 (文件节点) struct FileIndexElement { unsigned Index。 //文件元素索引编号 char FileName[NAME_LEN]。 //文件元素名 char ParentName[NAME_LEN]。 //父节点名 unsigned FileBlockId。 //文件元素所在物理块编号 unsigned FileLevel。 //文件元素所在层次,层+文件元素名为一个文件元素的逻辑位置 char creatTime[18]。 //文件创建时间 char *filecontent。 //文件内容 BOOL effect。 //是否有效, 0无效, 1有效 FileType Type。 //识别文件还是目录 }。 //文件索引结构或目录表项 (文件目录结构) struct FileIndex { FileIndexElement *FIStart。 //文件系统中的文件索引起始 位置 unsigned FILen。 //文件索引的最大长度 unsigned FICount。 //文件索引数量 }。 //文件块的结构 (存储数据块结构) struct FileBlock。 typedef struct FileBlock *pFileBlock。 struct FileBlock { unsigned FileBlockId。 //文件块编号 unsigned BLOCK_SIZE。 //文件块的容量 char *FileBlockAddr。 //文件块地址 pFileBlock next。 //下一个文件块的地址 }。 //文件系统的位示图结构 (用于显示分配的存储器分配情况) struct BitMap { unsigned BITMAP_LEN。 //文件位示图长度 char *BMStart。 //位示图的起始指针 }。 //文件系统结构 (超级块的结构 ,全局变量) struct SuperBlock { char *FSStart。 //文件系统的起始地址 unsigned SuperBlockSize。 //文件系统的容量 BitMap bm。 //文件系统中的位示图 unsigned BLOCK_COUNT。 //文件系统中文件块的数量 pFileBlock head。 //文件系统中文件块首地址 FileIndex FI。 //文件系统中的文件索引 }。 //登陆用户的数据结构 (用户的数据结构) struct User。 typedef struct User *pUser。 struct User { char *UserName。 //用户名称 char *password。 //用户密码 int isAdmin。 //用户类型, 1表示管理员, 0表示用户 pUser NextUser。 }。 struct LoginStruct{ int User_Login_tims。 int UserNum。 pUser pUserList。 }。 //文件系统中的元素结构,包括文件和文件夹 (逻辑文件的定义,树形结构) struct FSElement。 typedef struct FSElement *pFSElement。 struct FSElement { pFSElement parent。 //指向自己的父亲节点 unsigned FileLevel。 //文件元素所在层次,层+文件元素名为一个文件元素的逻辑位置 char FileName[NAME_LEN]。 //文件元素名 unsigned FileBlockId。 //文件元素所在物理块编号 unsigned FileElemLen。 //文件元素的长度 FileType Type。 //文件元素类型 FileAccess Access。 //文件元素可供操作的权限 User Creator。 //文件创建者 char CreateTime[18]。 //创建时间,日期格式: MM/DD/YY HH:MI:SS char LastModTime[18]。 //最后一次修改时间 char *FileData。 //一个文件的数据开始地址, 文件夹时该值为 NULL FileStatus fileStu。 //如果是一个文件表示文件当前的状态 }。 //系统当前状态 struct CurrentStatus { User CurrentUser。 //当前用户 unsigned FileLevel。 //用户所在文件系统层 FSElement *CurrParent。 //当前层的父节点 char *CurrentPath。 //当前路径 }。 SuperBlock FS。 //一个全局文件系统的变量 CurrentStatus CS。 //当前系统状态 FSElement *base。 //文件元素的根 LoginStruct LoginS。 //用户列表,在登录的时候用到,以链表形式存储 bool InitFileSys()。 //(初始化文件函数) //======================================================================================== //函数说明:权利 声明 void Right(void) { cout文件管理系统 [版本 ]\n。 cout版权所有 (c) 2020 计算机 4班。 保留所有权利。 \n\n。 return。 } //========================================================================================== // 函数介绍:寻找第一个 空白 的文件块 ID // 返 回 值:返回第一个空白块的 ID unsigned FindBlankFileBlockId(void) { unsigned char c。 //通过位示图 查找 可以简化 for (unsigned i = 0。 i / 8。 i++) { c = [i] | 0x7F。 if (c == 0x7F) { return i * 8。 //一个字节左边第一位为 0,表示该区域未使用 } c = [i] | 0xBF。 if (c == 0xBF) { return i * 8 + 1。 } c = [i] | 0xDF。 if (c == 0xDF) { return i * 8 + 2。 } c = [i] | 0xEF。 if (c == 0xEF) { return i * 8 + 3。 } c = [i] | 0xF7。 if (c == 0xF7) { return i * 8 + 4。 } c = [i] | 0xFB。 if (c == 0xFB) { return i * 8 + 5。 } c = [i] | 0xFD。 if (c == 0xFD) { return i * 8 + 6。 } c = [i] | 0xFE。 if (c == 0xFE) { return i * 8 + 7。 } } return BLOCK_COUNT + 1。 } //================================================================================================ // 函数介绍:寻找第一个 文件块地址 (根据文件块 ID,找文件块) // 输入参数: fileblockid 文件块 ID // 返 回 值:返回文件块的地址 char * FindBlankFileBlock(unsigned fileblockid) { FileBlock *fblock =。 while (fblocknext != NULL) { if (fblockFileBlockId == fileblockid) { return fblockFileBlockAddr。 //如果找到文件块,返回文件块的地址, } else { fblock = fblocknext。 } } return NULL。 //没有找到,返回空。 } //================================================================================================== // 函数介绍:得到当前时间的字符串 // 输入参数:时间字符串的指针 void GetCurrent_Time(char *currtime) { char dbuffer [9]。 char tbuffer [9]。 _strdate(dbuffer)。 //获得日期 _strtime(tbuffer)。 //获得时间 strcpy(currtime, dbuffer)。 strcat(currtime, )。 strcat(currtime, tbuffer)。 //将两者拼接在一起,并用空格隔开 } //================================================================================================================= // 函数介绍:更新文件索引 // 输入参数: fileblockid 文件块 ID void AddFileIndex(unsigned fileblockid, unsigned filelevel, char *filename, char *parentname,FileType temp) { [].FileBlockId = fileblockid。 [].FileLevel = filelevel。 strcpy([].FileName, filename)。 [].Type = temp。 if (parentname == NULL) { memset([].ParentName, 39。 \039。 , NAME_LEN)。 //如果没有父亲节点的话,将其父亲节点格式化 } else { strcpy([].ParentName, parentname)。 } [].Index =。 [].effect = 1。 GetCurrent_Time([].creatTime)。 ++。 } //================================================================================================== // 函数介绍:更新位示图 // 输入参数: fileblockid 文件块 ID 更改对应的位示图 vo。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。