多用户多级目录文件系统的实现-操作系统 第3页
3.3.6用户结构
typedef struct
{
char *UserName; //用户名称
UserType ut; //用户类型
} User;
4.各主要模块的算法流程图
4.1整体思路概述
首先系统要完成初始化的任务,建立一个系统,并等待用户登录使用文件系统,用户登录系统时,系统对用户的用户名和密码进行验证(允许用户用限次的尝试,多最多尝试五次),如果用户登录成功,则系统进入命令提示符状态,等用户输入指令后,系统得用一个解释程序按照指定方式处理用户请求,用户退出后,系统转入登录模块,等待下一位用户的登录。
4.1.1login (用户登录)
内置9个用户名和密码,用来验证登录用户的身份,用户登录成功后会初始化当前用户等一系列的系统当前信息,默认用户的类型为普通用户,如果用户未能通过身份验证,提示用户登录失败,退出整个系统。
用户登录流程图
4.1.2系统初始化
系统的初始化要完成文件系统的建立,包括以下几部分:请求内存、设置位示图、初始化文件索引、初始化文本块链表、初始化系统的当前状态、创建一个根目录做为系统的根。
4.1.3文件的创建: create
只支持在当前目录创建文件,根据位示图找到一个未使用的文件块用来存放用户的文件信息,根据系统当前状态来构建一个文件系统元素放入到找到的文件块中,新创建的文件状态为关闭,同时更新位示图和文件索引。
文件创建流程图
void Create(char *filename)
{
if (strcmp(filename, "") == 0)
{
printf("对不起,文件名不能为空。\n");
}
else
{
CreateFileElement(protect, filename, file, NULL, CS.CurrParent);
}
printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);
}
4.1.4文件的打开:open
只支持在当前目录进行操作,通过用户给定的文件名在文件索引中搜索到文件的物理文件块ID,找到该文件元素后,将文件当前状态置为打开。
打开文件流程图
void Open(char *path)
{
char display[100];
for (unsigned i = 0; i < FS.FI.FICount; i++)
{
if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName)
&& FS.FI.FIStart[i].FileLevel == CS.FileLevel
&& FS.FI.FIStart[i].effect == 1
&& strcmp(FS.FI.FIStart[i].FileName, path) == 0)
{
FSElement *fselem = (FSElement *)
FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);
fselem->fileStu = opened;
strcpy(display, "文件已打开完毕。\n");
break; } }
if (strcmp(display, "") == 0)
{
strcpy(display, "当前目录下没有您要打开的文件。\n");
}
printf("%s\n", display);
printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);
}
4.1.5文件的读:read
只支持在当前目录进行操作,前提是用户已执行文件打开的命令,否则会提示用户先打开文件。通过类似的查找方式,找到文件的数据部分,将数据显示到界面。
上一页 [1] [2] [3] [4] [5] [6] 下一页
多用户多级目录文件系统的实现-操作系统 第3页下载如图片无法显示或论文不完整,请联系qq752018766