《操作系统文件系统实验》由会员分享,可在线阅读,更多相关《操作系统文件系统实验(22页珍藏版)》请在金锄头文库上搜索。
1、1实验四实验四 文件系统实验文件系统实验一一实验题目:实验题目:文件系统实验二二实验目的:实验目的:阅读并调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。了解设计一个 n 个用户的文件系统,每个用户可以保存 M 个文件。用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有 create、delete、open、close、read、write 等命令. 三三实验设备及环境:实验设备及环境:1. 硬件设备:PC 机一台2. 软件环境:安装 Windows 操作系统,C 语言软件。 四四实验内容及要求:实验内容及要求:在阅读
2、所给文件系统源程序的基础上,画出其实现的详细流程图,并给出有关的数据结构和说明。五五. . 实验方法内容实验方法内容 1. 算法流程图算法流程图 (1)简单文件系统实验流程图NYYN输入命令用户注销结束存在?重新输入开始选择操作(登陆/注册)用户登陆用户注册输入用户名用户存在?2(2)void Execute(int i,int len,int cmdset)执行命令函数流程图(3)创建文件YY N开始定义整型变量 ji|cmdi= = Nbreakbufferj=cmdi;j+;bufferj=0 strcat(buffer,“.txt“)Switch 语句 选择服务种类结束YN开始结束登陆
3、或创建注册名Createfile该文件名是否存在?文件创建成功 给文件存在 另行创建3(4)写文件流程图(5)修改文件执行权限(6)删除用户注册信息或文件YYN开始结束Writefile选择写入方式输入正文判断写入是否结束#?NNY权限值在 30-33 之 间结束开始Chmodfile输入新的权限值30-33?确认开始用户:close 文件:delete删除?结束删除文件42. 主要的常量变量主要的常量变量char cmd64; /存放用户输入命令 char buffer36; char user32;/存放当前登陆的用户名 typedef char ALFA12; ALFA KWORDkey
4、num; struct UFD/用户文件管理模块 char filename32; /文件名 int safecode; /文件保护码 long length; /文件长度 *curfile = NULL; struct MFD/用户登陆信息管理模块 char username32; /用户名 bool filepoint; /用户目录下的文件指针,false 表示目录为空,true 为该用户目录中有文件 *curuser = NULL,*elseuser=NULL; typedef UFD UFD; typedef MFD MFD; 3.3. 主要模块主要模块 void KeyWord()/
5、初始化命令关键字 int LoginDisplay() /登陆选项操作函数 bool Login(int SELETE)/用户登陆,注册函数 void DisplayUFD()/打印用户信息,包括用户的各个文件/名称、长度和操作权限的设置信息 void ByeFile(bool BOOL)/注销函数,调用次函数用户可以退出系统 bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除 /首先将该用户目录下的全部文件删除 void ClearUserMes()/删除用户全部信息 void CreatFile()/在当前用户目录下创建文件 void DeleteFile()/
6、删除当前目录下一个文件的操作 void ListAllFile()/显示当前用户目录下的文件信息 bool QueryModElse(bool BOOL,bool /存放用户输入命令 char buffer36;/5char user32;/存放当前登陆的用户名 typedef char ALFA12; ALFA KWORDkeynum; /- - struct UFD/用户文件管理模块 char filename32; /文件名 int safecode; /文件保护码 long length; /文件长度 *curfile = NULL; /- - struct MFD/用户登陆信息管理模
7、块 char username32; /用户名 bool filepoint; /用户目录下的文件指针,false 表示目录为空,true 为该用户目录 中有文件 *curuser = NULL,*elseuser=NULL; typedef UFD UFD; typedef MFD MFD; void main(); /- - void KeyWord()/初始化命令关键字 strcpy(KWORD 1,“bye“); strcpy(KWORD 2,“chmod“); strcpy(KWORD 3,“close“);strcpy(KWORD 4,“create“); strcpy(KWORD
8、 5,“delete“); strcpy(KWORD 6,“list“); strcpy(KWORD 7,“open“); strcpy(KWORD 8,“read“); strcpy(KWORD 9,“write“); /- - int LoginDisplay() /登陆选项操作函数 int SELETE_1 = 0; do coutSELETE_1; while(SELETE_12); system(“cls“); return SELETE_1; /- - bool Login(int SELETE)/用户登陆,注册函数 FILE *fp,*fp1,*fp2; char name12;
9、 switch(SELETE) case 1:/用户登陆 if(fp = fopen(“LOGIN.exe“,“rb“) = NULL)/打开用户注册目录管理文件 coutname; /输入用户登陆名while(!feof(fp) /检查该用户是否合法 fread(curuser,sizeof(MFD),1,fp); if(strcmp(curuser-username,name)=0) break; if(feof(fp) /如果没有找到跟当前登陆用户名相同的管理信息,提示出 错 coutname; /输入用户注册名 fp1 = fopen(“LOGIN.exe“,“rb“); while(
10、!feof(fp1)/查看该用户名是否被别的用户占用 fread(curuser,sizeof(MFD),1,fp1); if(strcmp(curuser-username,name) = 0)/该名称已经被使用 coutusername,name);curuser-filepoint = NULL;fwrite(curuser,sizeof(MFD),1,fp); strcpy(user,curuser-username);/生成用户文件管理模块 strcat(user,“.exe“); /用于管理用户目录下的各个文件 fp2=fopen(user,“wb+“); fclose(fp2);
11、coutusernamefilepoint = false)/当前用户目录下没有任何文件存在 coutusernameusername); strcat(filename,“.exe“); if(fp=fopen(filename,“rb“)=NULL)/打开用户文件信息管理模块 coutusernameusernamefilenamelengthsafecodeusername,curuser-username)=0) if(BOOL)/更新当前用户信息的操作 fwrite(curuser,sizeof(MFD),1,outfile); else continue;/如果用户想把自己的注册目
12、录从系统中彻底删 除 /则执行该操作 else fwrite(mfd,sizeof(MFD),1,outfile); /写入新的模块 fclose(infile);fclose(outfile); remove(“LOGIN.exe“);/将旧的该用户的文件管理模块删除 rename(out,“LOGIN.exe“);/将新的用户的文件管理模块重命名为用户目录 下的 /管理模块 /- - bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除 /首先将该用户目录下的全部文件删除 FILE *fp; char file50; strcpy(file,curuser-use
13、rname); strcat(file,“.exe“); if(fp=fopen(file,“rb“)=NULL) /打开用户文件信息管理模块9 / fclose(fp); coutfilename);/删除文件 fclose(fp); return true; /- - void ClearUserMes()/删除用户全部信息 char name50; strcpy(name,curuser-username); strcat(name,“.exe“); remove(name); /从磁盘中删除用户文件信息管理模块 ByeFile(false);/更新系统的用户登陆信息管理模块 /- - void DeleteUser()/删除用户注册目录的操作 char ch; coutch; switc