操作系统课程设计报告设计实现一个模拟文件系统.docx
- 文档编号:1931249
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:36
- 大小:594.21KB
操作系统课程设计报告设计实现一个模拟文件系统.docx
《操作系统课程设计报告设计实现一个模拟文件系统.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告设计实现一个模拟文件系统.docx(36页珍藏版)》请在冰点文库上搜索。
学号 专业 班级 学生姓名
装订线内请勿答题
文 华 学 院
2017~2018学年度第2学期《操作系统课程设计》考查试卷
(A卷)
课程性质:
(必修) 使用范围:
(本科)考查时间:
2018年3月2日 考查方式:
(开卷)
考试类型
论文
大作业
调研报告
其它
总分
课程设计
阅卷老师签名
试题:
要求:
独立完成,3000-8000字(不含附件)。
-35-
目录
一、课程设计任务及要求 3
1.1设计任务 3
1.2设计要求 3
二、算法及数据结构 3
2.1主要数据结构 3
2.2用户管理模块 5
2.2.1初始化用户函数 5
2.2.2系统用户的输出函数 6
2.2.3用户的查找函数 6
2.3创建文件函数 6
2.4删除文件函数 8
2.5打开文件函数 9
3.6读文件函数 11
3.7写文件函数 11
3.8关闭文件函数 12
3.9显示文件函数 13
3.9.1显示用户文件 13
3.9.2显示已打开的文件 13
三、程序设计与实现 18
4.1程序流程图 18
4.2程序说明 18
4.3实验结果 19
四、参考文献 21
六、收获、体会和建议 22
七、附录源程序清单 23
学号 专业 班级 学生姓名
装订线内请勿答题
一、课程设计任务及要求
1.1设计任务
设计、实现一个模拟的文件系统
1.2设计要求
建立文件存储介质的管理机制建立目录(采用一级目录结构)
文件系统功能(显示目录、创建、删除、打开、关闭、读、写)文件操作接口(显示目录、创建、删除、打开、关闭、读、写)独立完成课程设计内容
文本的课程设计报告,内容包括调试记录和程序清单(附注释)。
二、算法及数据结构
2.1主要数据结构
/**定义文件数据结构*/
typedefstructfile
{
charfile_name[20];boolfile_protect[3];
boolopen_file_protect[3];//仅在文件打开时有效
intread,write;//定义为读写指针
intfile_length;structfile*next;
}File;
/**用户与文件的映射*/
typedefstructx_map
{
charuserName[20];
File*file;
structx_map*next;
}Map;
/**定义主文件目录*/
typedefstructmfd
{
Map*head,*tail;
}MFD;
/**打开文件目录*/
typedefstructafd
{
File*head,*tail;intmax_open;
intcurrent_open;
}AFD;
主文件目录(MFD)和用户文件目录(UFD)
学号 专业 班级 学生姓名
装订线内请勿答题
打开文件目录(AFD)
2.2用户管理模块
2.2.1初始化用户函数
voidinitUser(MFD*mfd)
{//初始化两个不同用户
i=
;i<=
;i++)
for(int 1 2
{
Map*m;
m=(Map*)malloc(sizeof(Map));if(m==NULL)
{
exit(0);
}
cout<<"Pleaseinputinitusername:
";cin>>m->userName;
m->file=NULL;m->next=NULL;if(mfd->head==NULL)
{
mfd->head=mfd->tail=m;
}
else
{
mfd->tail->next=m;mfd->tail=m;
}
}
}
初始化两个不同用户,把输入用户的用户名下的目录指针、文件指针初始化
2.2.2系统用户的输出函数
voiddisplayUser(MFD*mfd)
{
Map*m=NULL;m=mfd->head;cout<<"user:
";while(m)
{
cout<
}
cout< } 通过用户与文件关联映射的指针来输出已存在的用户数据 2.2.3用户的查找函数 Map*queryUser(charuserName[],MFD*mfd) { Map*m=NULL;m=mfd->head;while(m) { if(strcmp(userName,m->userName)==0) 学号 专业 班级 学生姓名 装订线内请勿答题 { returnm; } m=m->next; } returnNULL; } 进行用户的查找,找到则返回用户映射指针 2.3创建文件函数 bool createFile(Map *user , char file_name[] , boolfile_protect[3],intfile_length) { File*file; file=(File*)malloc(sizeof(File));if(file==NULL) { returnfalse; } //进行文件的初始化 file->read=file->write= ; strcpy(file->file_name,file_name);file->file_protect[0]=file_protect[0];file->file_protect[1]=file_protect[1];file->file_protect[2]=file_protect[2];file->file_length=file_length; 0 file->next=NULL; if(user->file==NULL) { user->file=file; } else { File*op,*preOp=NULL;op=user->file; //查找是否存在同名文件 while(op) { if(strcmp(op->file_name,file->file_name)==0) { cout<<"The file name "< "< returnfalse; } preOp=op;op=op->next; } preOp->next=file; } } 输入文件名,文件权限及文件长度,将文件的名称、读写权限、长度等进行初始化,然后查找是否存在同名文件,存在同名文件时则输出该文件已存在并报错 2.4删除文件函数 booldeleteFile(Map*user,charfile_name[],AFD*afd) { File*file=NULL,*prefile=NULL,*temp;file=afd- >head; 学号 专业 班级 学生姓名 装订线内请勿答题 //在打开文件中查找 while(file) { if(strcmp(file_name,file->file_name)==0) { cout<<"\""< \n"; returnfalse; } file=file->next; } file=user->file; //在文件中进行查找 while(file) { if(strcmp(file_name,file->file_name)==0) { if(file==user->file) { temp=file; user->file=file->next; } else { temp=file; prefile->next=file->next; } deletetemp;returntrue; } prefile=file;file=file->next; } if(prefile->next==NULL) { cout<<"user "< \""< } returnfalse; } 输入要删除的文件名,先看该文件是否打开,在打开文件链表中查找,若是打开文件则输出提示该文件已打开请先关闭文件,若不是则在用户文件中查找,找到则进行删除操作,没有则输出提示该用户没有此文件并报错 2.5打开文件函数 boolopenFile(Map*user,charfile_name[],AFD*afd,boolopen_file_protect[]) { File*file=NULL;file=user->file;while(file) { if(strcmp(file->file_name,file_name)==0) { break; } file=file->next; } 学号 专业 班级 学生姓名 装订线内请勿答题 if(file) { File*xfile; xfile=(File*)malloc(sizeof(File));if(xfile==NULL) { returnfalse; } *xfile=*file; //根据文件的权限进行打开权限的赋值 if(xfile->file_protect[0]>=open_file_protect[0]) { xfile->open_file_protect[0]=open_file_protect[0]; } else { cout<<"noreadpriority! "< } if(xfile->file_protect[1]>=open_file_protect[1]) { xfile->open_file_protect[1]=open_file_protect[1]; } else { cout<<"nowritepriority! "< } if(xfile->file_protect[2]>=open_file_protect[2]) { xfile->open_file_protect[2]=open_file_protect[2]; } else { cout<<"noexcutepriority! "< } xfile->next=NULL;if(afd->head==NULL) { afd->head=afd->tail=xfile; afd->current_open+= ; 1 } elseif(afd->current_open { afd->tail->next=xfile;afd->tail=xfile; afd->current_open+= ; 1 } else { cout<<"Theopenfileistoomany! "< false; } } else { cout<<"the"< "< 学号 专业 班级 学生姓名 装订线内请勿答题 false; } } 输入要打开的文件名及文件权限,根据文件名在文件链表中查找,若没有找到则输出提示该文件不存在,若找到则根据输入的文件权限判断该文件是否有读、写、执行的权限,若没有则输出相关提示并报错,若有相关权限则输出该文件的读写信息。 判断已打开文件数是否超过最大打开数,若超过则输出提示打开了太多的文件并报错,若没有则继续运行 2.6读文件函数 boolreadFile(AFD*afd,charfile_name[]) { File*file=NULL;file=afd->head;while(file) { if(strcmp(file->file_name,file_name)==0) { if(file->open_file_protect[0]) { file->read++;returntrue; } Else { cout<<"noreadpriority! \n"< } } file=file->next; } cout<<"nosuchfile! "< } 输入要读的文件名,在文件链表中查找该文件是否存在,若不存在则输出提示没有该文件并报错,存在则继续运行,查看该文件创建是的权限信息是否有读权限,若没有则输出提示没有读权限并报错,有权限则将读指针加一。 2.7写文件函数 boolwriteFile(AFD*afd,charfile_name[]) { File*file=NULL;file=afd->head;while(file) { if(strcmp(file->file_name,file_name)==0) { if(file->open_file_protect[1]) { file->write++;returntrue; } else { cout<<"nowritepriority! \n"< } } file=file->next; 学号 专业 班级 学生姓名 装订线内请勿答题 } cout<<"nosuchfile! "< } 输入要读的文件名,在文件链表中查找该文件是否存在,若不存在则输出提示没有该文件并报错,存在则继续运行,查看该文件创建是的权限信息是否有写权限,若没有则输出提示没有写权限并报错,有权限则将写指针加一。 2.8关闭文件函数 boolcloseFile(AFD*afd,charfile_name[]) { File*file=NULL,*preFile=NULL,*temp=NULL; //在打开文件链表中进行查找 file=afd->head;while(file) { if(strcmp(file->file_name,file_name)==0) { if(file==afd->head) { if(file==afd->tail) { temp=file; afd->head=afd->tail=NULL; } else { temp=file; afd->head=file->next; } } elseif(file==afd->tail) { temp=file; preFile->next=NULL;afd->tail=preFile; }else { temp=file; preFile->next=file->next; } deletetemp;returntrue; } preFile=file;file=file->next; } cout<<"Thefileisnotexit! "< } 输入要关闭的文件名,在打开文件链表中查找该文件是否存在,若没有则输出提示该文件不存在并报错,若存在则继续运行,进行删除操作。 2.9显示文件函数 2.9.1显示用户文件 voiddisplayUserFile(Map*user) { cout<<"ThefileListof"< 学号 专业 班级 学生姓名 装订线内请勿答题 File*file=NULL;file=user->file;while(file) { cout< >file_length< } } 输出该用户下的文件链表,并输出对应文件的读、写、执行的权限信息和文件长度信息 2.9.2显示已打开的文件 voiddisplayOpenFile(AFD*afd,Map*user) { cout<<"Theopenfileof"< "< file=afd->head;while(file) { cout< >file_length<<""; cout<<"readcout: "< "< >write< } } 输出该用户下的打开文件链表、对应文件的读、写、执行的权限信息及文件长度信息和该文件的读、写信息 退出系统 关闭文件 写文件 读文件 打开文件 删除文件 创建文件 4.程序设计与实现 4.1程序流程图 开始 初始化用户 用户登陆 结束 分析命令 目录界面 4.2程序说明 该程序是在虚拟机中的Linux系统下的C++程序,用系统自带的编译软件编译,在控制台上编译、调试运行通过。 软件环境: VMwareWorkstation、ubuntu-16.04-desktop-amd64 学号 专业 班级 学生姓名 装订线内请勿答题 4.3实验结果 在控制台上编译运行程序,输入初始化的两个用户名,选择一个用户名进入目录界面,输入命令。 输入命令create创建文件,输出提示文件名、文件权限、文件长度,输入相应的文件信息,创建成功则输出当前用户的文件链表。 输入命令delete删除文件,输出提示”pleaseinputthefile’snameyouwanttodelete: ”,输入要删除的文件名,删除成功则输出当前用户的文件链表。 输入命令open打开文件,输出提示“pleaseinputthefile’snameyouwanttoopen : ”输入要打开的文件名和相应的权限,打开文件成功则输出当前用户的打开文件链表。 学号 专业 班级 学生姓名 装订线内请勿答题 输入命令read读文件,输出提示“pleaseinputthefile’snameyouwanttoread: ”,输入要读的文件名,读成功则读指针加一并输出当用户的打开文件链表。 输入命令write写文件,输出提示“pleaseinputthefile’snameyouwanttowrite: ”,输入要写的文件名,写成功则写文件指针加一并输出当前用户的打开文件链表。 输入命令close关闭文件,输出提示“pleaseinputthefile’snameyouwanttoclose: ”,输入要关闭的文件名,关闭成功则输出当前用户的打开文件链表。 4、参考文献 1.计算机操作系统实验指导(Linux版)郑然、庞丽萍著。 人民邮电出版社2014 2.计算机操作系统(第2版)庞丽萍、阳富民著。 人民邮电出版社2014 5、收获、体会和建议 本次课程设计是一次将书本知识应用到实践考验。 经过此次设计,将课本和课堂所学的一些知识运用到程序中还是需要一定的努力,自学一些相关的知识。 在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,提高了自己解决问题的能力,知道了应该耐心的去解决程序中的问题和不足。 遇到问题时,应该认真去查阅资料,学习不懂的知识。 通过课程设计,对自己学习Linux操作系统有用的软件及对操作系统中文件管理系统的了解,更深一步掌握了操作系统的一些概念。 在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过在网上查询资料以及参考书本上的列题等,完成了此次课程设计。 学号 专业 班级 学生姓名 装订线内请勿答题 附录源程序清单 /* *模拟文件管理 */#include usingnamespacestd; /* *定义文件数据结构 */
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告 设计 实现 一个 模拟 文件系统