2022年操作系统文件系统实验 .pdf
《2022年操作系统文件系统实验 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统文件系统实验 .pdf(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、1 实验四文件系统实验一实验题目:文件系统实验二实验目的:阅读并调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。了解设计一个n 个用户的文件系统,每个用户可以保存M 个文件。用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete 、open、close、read、write 等命令 . 三实验设备及环境:1. 硬件设备: PC机一台2. 软件环境:安装Windows 操作系统, C语言软件。四实验内容及要求:在阅读所给文件系统源程序的基础上,画出其实现的详细流程图,并给出有关的数据结构和说明。五.
2、 实验方法内容1. 算法流程图( 1)简单文件系统实验流程图N Y Y N 输入命令用户注销结束存在?重新输入开始选择操作(登陆/注册)用户登陆用户注册输入用户名用户存在?名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 22 页 - - - - - - - - - 2 (2)void Execute(int i,int len,int cmdset) 执行命令函数流程图(3)创建文件Y Y N 开始定义整型变量j i|cmdi=N break bufferj=cmdi;j
3、+; bufferj=0 strcat(buffer,.txt) Switch 语句选择服务种类结束Y N 开始结束登陆或创建注册名Createfile 该文件名是否存在?文件创建成功给文件存在另行创建名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 22 页 - - - - - - - - - 3 (4)写文件流程图(5)修改文件执行权限(6)删除用户注册信息或文件Y Y N 开始结束Writefile 选择写入方式输入正文判断写入是否结束#?N N Y 权限值在 30-
4、33 之间结束开始Chmodfile 输入新的权限值30-33?确认开始用户: close 文件: delete 删除?结束删除文件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 22 页 - - - - - - - - - 4 2. 主要的常量变量char cmd64; / 存放用户输入命令char buffer36; char user32;/ 存放当前登陆的用户名typedef char ALFA12; ALFA KWORDkeynum; struct UFD/ 用
5、户文件管理模块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. 主要模块void KeyWord()/ 初始化命令关键字int LoginDisplay
6、() / 登陆选项操作函数bool Login(int SELETE)/ 用户登陆,注册函数void DisplayUFD()/ 打印用户信息,包括用户的各个文件/名称、长度和操作权限的设置信息void ByeFile(bool BOOL)/注销函数,调用次函数用户可以退出系统bool ClearUserFile()/ 用户要将自己的注册目录从系统彻底删除/首先将该用户目录下的全部文件删除void ClearUserMes()/ 删除用户全部信息void CreatFile()/ 在当前用户目录下创建文件void DeleteFile() /删除当前目录下一个文件的操作void ListAll
7、File()/显示当前用户目录下的文件信息bool QueryModElse(bool BOOL,bool &flag)/查询其它用户目录下文件的文件/当该文件的权限允许当前用户对其执行有关操作时,返回ture bool QueryMod(bool BOOL)/查询权限bool WriteRight(int len,bool BOOL)/查看是否已经正确地写入到该文件信息中void WriteLengthToFile(int Len,bool BOOL)/将文件长度写入文件管理模块中void WriteFile()/ 向文件写入信息的操作void ReadFile()/ 读文件函数void C
8、hangeMod()/ 修改某文件的执行权限void Execute(int i,int len,int cmdset)/执行命令函数void Command()/ 读取用户输入的命令,并将其转换成系统能识别的命令void main() 4. 代码/* * 文件名 : Simple_file_system.c * 功能: 简单文件管理系统模拟程序*/ #include #include #include #include #include conio.h #include #define NULL 0 #define keynum 10 #define getspace(type) (type
9、*)malloc(sizeof(type) char cmd64; /存放用户输入命令char buffer36;/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 22 页 - - - - - - - - - 5 char user32;/存放当前登陆的用户名typedef char ALFA12; ALFA KWORDkeynum; /- struct UFD/用户文件管理模块char filename32; / 文件名int safecode; / 文件保护码lon
10、g length; / 文件长度*curfile = NULL; /- struct MFD/用户登陆信息管理模块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,
11、close); strcpy(KWORD 4,create); strcpy(KWORD 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 cout *请选择操作 *n1、用户登陆 2 、用户注册 0 、退出SELETE_1; while(SELETE_12); system(cls); return SELETE_1; /- bool Lo
12、gin(int SELETE)/用户登陆,注册函数 FILE *fp,*fp1,*fp2; char name12; switch(SELETE) case 1:/用户登陆if(fp = fopen(LOGIN.exe,rb) = NULL)/打开用户注册目录管理文件 coutn错误:不能打开登陆文件。endl; getch();system(cls); return false; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 22 页 - - - - - - - -
13、- 6 curuser = getspace(MFD); coutname; / 输入用户登陆名while(!feof(fp) / 检查该用户是否合法 fread(curuser,sizeof(MFD),1,fp); if(strcmp(curuser-username,name)=0) break; if(feof(fp) / 如果没有找到跟当前登陆用户名相同的管理信息,提示出错 coutn错误:该用户不存在。 endl; fclose(fp); return false; else fclose(fp); return true; break; case 2: /新用户注册if(fp=fo
14、pen(LOGIN.exe,ab)=NULL)/如果登陆信息管理文件不存在fp=fopen(LOGIN.exe,wb+); /创建该信息管理文件char name12; curuser = getspace(MFD); while(1) coutn *新用户注册 *endl; coutname; /输入用户注册名fp1 = fopen(LOGIN.exe,rb); while(!feof(fp1)/查看该用户名是否被别的用户占用 fread(curuser,sizeof(MFD),1,fp1); if(strcmp(curuser-username,name) = 0) / 该名称已经被使用
15、coutn该用户已经存在,请重新输入!username,name); curuser-filepoint = NULL; fwrite(curuser,sizeof(MFD),1,fp); strcpy(user,curuser-username); / 生成用户文件管理模块strcat(user,.exe); / 用于管理用户目录下的各个文件fp2=fopen(user,wb+); fclose(fp2); coutn注册成功! endl; /提示注册成功fclose(fp1); fclose(fp); break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
16、- - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 22 页 - - - - - - - - - 7 fp = fopen(LOGIN.exe,rb); / 显示当前注册用户的名称while(1) fread(curuser,sizeof(MFD),1,fp); if(feof(fp) break; coutusernamefilepoint = false) / 当前用户目录下没有任何文件存在coutn用户 username 文件夹是空的 username); strcat(filename,.exe); if(fp=fopen(filename
17、,rb)=NULL) / 打开用户文件信息管理模块 coutn无法打开用户: username 的文件! endl; getch(); return; else / 读入并将用户全部文件信息打印在终端cout 用户: username 目录下的文件: endl; UFD *ufd; int i=0; ufd = getspace(UFD); / 申请存放用户文件模块的空间while(1) fread(ufd,sizeof(UFD),1,fp); if(feof(fp)/全部输出完毕,结束break; else/打印信息coutfilenametlengthtsafecodeendl; fclo
18、se(fp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 22 页 - - - - - - - - - 8 /- void ByeFile(bool BOOL)/注销函数,调用次函数用户可以退出系统 FILE *infile,*outfile; char out50; strcpy(out,outfilelocate.exe); if(infile=fopen(LOGIN.exe,rb)=NULL) coutn保存错误。 ; /fclose(infile); ret
19、urn; else if(outfile=fopen(out,wb+)=NULL) / 申请一个缓冲区管理模块/ 存放用户更新后的全部信息 coutusername,curuser-username)=0) if(BOOL)/更新当前用户信息的操作fwrite(curuser,sizeof(MFD),1,outfile); else continue; / 如果用户想把自己的注册目录从系统中彻底删除/ 则执行该操作 else fwrite(mfd,sizeof(MFD),1,outfile); /写入新的模块 fclose(infile);fclose(outfile); remove(LOG
20、IN.exe); / 将旧的该用户的文件管理模块删除rename(out,LOGIN.exe); / 将新的用户的文件管理模块重命名为用户目录下的/ 管理模块 /- bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除/ 首先将该用户目录下的全部文件删除 FILE *fp; char file50; strcpy(file,curuser-username); strcat(file,.exe); if(fp=fopen(file,rb)=NULL) / 打开用户文件信息管理模块名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
21、- - - - - - 名师精心整理 - - - - - - - 第 8 页,共 22 页 - - - - - - - - - 9 / fclose(fp); coutfilename); / 删除文件 fclose(fp); return true; /- void ClearUserMes()/删除用户全部信息 char name50; strcpy(name,curuser-username); strcat(name,.exe); remove(name); / 从磁盘中删除用户文件信息管理模块ByeFile(false); / 更新系统的用户登陆信息管理模块 /- void Dele
22、teUser()/删除用户注册目录的操作 char ch; coutn该操作将会是你在系统所有信息删除,下次登陆时你必须重新申请用户名!endl; coutn你确定要删除你在系统中的注册信息吗?Y/Nch; switch(ch) / 提示用户确认删除 case Y: case y: if(ClearUserFile() / 如果用户的全部文件已经删除了/ 则可以将该用户的文件信息管理模块也从磁盘中删除/ 以免在没完全删除文件却删了该文件信息管理模块/ 使得这些文件无法再进行管理造成磁盘空间的浪费ClearUserMes(); / 删除文件信息管理模块break; default: coutfi
23、lepoint=true; if(fp=fopen(buffer,r)=NULL) / 如果没有跟用户输入文件名相同的文件 if(fp=fopen(buffer,w)=NULL) coutn创建文件失败! ; / fclose(fp); return; fclose(fp); else / 用户要创建的文件已经存在coutch; switch(ch) case Y: case y: coutbuffer; strcat(buffer,.txt); fclose(fp); if(fp=fopen(buffer,w)=NULL) coutusername); strcat(user,.exe);
24、curfile = getspace(UFD); strcpy(curfile-filename,buffer); / 文件名curfile-length=0; / 该文件长度为零curfile-safecode=30; / 设置该文件的默认权限/11 00 ,文件主有读和写权,其他用户没有读写权if(fp=fopen(user,ab)=NULL) coutn错误:你可能不是合法用户。endl; getch(); else fwrite(curfile,sizeof(UFD),1,fp); / 将该文件信息写入用户文件信息管理模块中coutn文件 filename 创建成功! ; fclose
25、(fp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 22 页 - - - - - - - - - 11 void DeleteFile() / 删除当前目录下一个文件的操作 char ch; FILE *infile,*outfile; coutn确定要删除文件: buffer Y/Nch;/提示用户确认删除switch(ch) case Y: case y: / 更新用户文件信息管理模块,这里同样使用缓冲区模块来更新 / 方法与上面将到的类似char out5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统文件系统实验 2022 操作系统 文件系统 实验
限制150内