操作系统课程设计报告--设计、实现一个模拟的文件系统Word格式文档下载.docx
- 文档编号:3762361
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:36
- 大小:594.22KB
操作系统课程设计报告--设计、实现一个模拟的文件系统Word格式文档下载.docx
《操作系统课程设计报告--设计、实现一个模拟的文件系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告--设计、实现一个模拟的文件系统Word格式文档下载.docx(36页珍藏版)》请在冰点文库上搜索。
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;
file=NULL;
m->
next=NULL;
if(mfd->
head==NULL)
mfd->
head=mfd->
tail=m;
else
mfd->
tail->
next=m;
初始化两个不同用户,把输入用户的用户名下的目录指针、文件指针初始化
2.2.2系统用户的输出函数
voiddisplayUser(MFD*mfd)
Map*m=NULL;
m=mfd->
head;
cout<
user:
while(m)
userName<
m=m->
next;
endl;
通过用户与文件关联映射的指针来输出已存在的用户数据
2.2.3用户的查找函数
Map*queryUser(charuserName[],MFD*mfd)
m=mfd->
head;
if(strcmp(userName,m->
userName)==0)
returnm;
m=m->
returnNULL;
进行用户的查找,找到则返回用户映射指针
2.3创建文件函数
bool createFile(Map *user , char file_name[] , boolfile_protect[3],intfile_length)
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_protect[1]=file_protect[1];
file_protect[2]=file_protect[2];
file_length=file_length;
if(user->
file==NULL)
user->
file=file;
File*op,*preOp=NULL;
op=user->
file;
//查找是否存在同名文件
while(op)
if(strcmp(op->
file_name,file->
file_name)==0)
The file name "
file_name<
isalreadyexit!
preOp=op;
op=op->
preOp->
next=file;
输入文件名,文件权限及文件长度,将文件的名称、读写权限、长度等进行初始化,然后查找是否存在同名文件,存在同名文件时则输出该文件已存在并报错
2.4删除文件函数
booldeleteFile(Map*user,charfile_name[],AFD*afd)
File*file=NULL,*prefile=NULL,*temp;
file=afd-
//在打开文件中查找
while(file)
if(strcmp(file_name,file->
\"
isopen,pleasecloseitbefore!
\n"
file=file->
file=user->
//在文件中进行查找
if(file==user->
file)
temp=file;
prefile->
next=file->
deletetemp;
returntrue;
prefile=file;
file=file->
if(prefile->
next==NULL)
user "
has not the file
endl;
输入要删除的文件名,先看该文件是否打开,在打开文件链表中查找,若是打开文件则输出提示该文件已打开请先关闭文件,若不是则在用户文件中查找,找到则进行删除操作,没有则输出提示该用户没有此文件并报错
2.5打开文件函数
boolopenFile(Map*user,charfile_name[],AFD*afd,boolopen_file_protect[])
File*file=NULL;
file=user->
while(file)
if(strcmp(file->
file_name,file_name)==0)
break;
if(file)
File*xfile;
xfile=(File*)malloc(sizeof(File));
if(xfile==NULL)
*xfile=*file;
//根据文件的权限进行打开权限的赋值
if(xfile->
file_protect[0]>
=open_file_protect[0])
xfile->
open_file_protect[0]=open_file_protect[0];
noreadpriority!
returnfalse;
file_protect[1]>
=open_file_protect[1])
open_file_protect[1]=open_file_protect[1];
nowritepriority!
file_protect[2]>
=open_file_protect[2])
open_file_protect[2]=open_file_protect[2];
noexcutepriority!
if(afd->
afd->
head=afd->
tail=xfile;
current_open+=
1
elseif(afd->
current_open<
afd->
max_open)
next=xfile;
Theopenfileistoomany!
<
return
false;
the"
isnotexit!
输入要打开的文件名及文件权限,根据文件名在文件链表中查找,若没有找到则输出提示该文件不存在,若找到则根据输入的文件权限判断该文件是否有读、写、执行的权限,若没有则输出相关提示并报错,若有相关权限则输出该文件的读写信息。
判断已打开文件数是否超过最大打开数,若超过则输出提示打开了太多的文件并报错,若没有则继续运行
2.6读文件函数
boolreadFile(AFD*afd,charfile_name[])
file=afd->
if(file->
open_file_protect[0])
read++;
Else
nosuchfile!
输入要读的文件名,在文件链表中查找该文件是否存在,若不存在则输出提示没有该文件并报错,存在则继续运行,查看该文件创建是的权限信息是否有读权限,若没有则输出提示没有读权限并报错,有权限则将读指针加一。
2.7写文件函数
boolwriteFile(AFD*afd,charfile_name[])
open_file_protect[1])
write++;
输入要读的文件名,在文件链表中查找该文件是否存在,若不存在则输出提示没有该文件并报错,存在则继续运行,查看该文件创建是的权限信息是否有写权限,若没有则输出提示没有写权限并报错,有权限则将写指针加一。
2.8关闭文件函数
boolcloseFile(AFD*afd,charfile_name[])
File*file=NULL,*preFile=NULL,*temp=NULL;
//在打开文件链表中进行查找
file=afd->
if(file==afd->
head)
tail)
tail=NULL;
head=file->
elseif(file==afd->
preFile->
tail=preFile;
}else
temp=file;
preFile=file;
Thefileisnotexit!
输入要关闭的文件名,在打开文件链表中查找该文件是否存在,若没有则输出提示该文件不存在并报错,若存在则继续运行,进行删除操作。
2.9显示文件函数
2.9.1显示用户文件
voiddisplayUserFile(Map*user)
ThefileListof"
"
file_protect[0]<
file_protect[1]<
file_protect[2]<
file-
file_length<
输出该用户下的文件链表,并输出对应文件的读、写、执行的权限信息和文件长度信息
2.9.2显示已打开的文件
voiddisplayOpenFile(AFD*afd,Map*user)
Theopenfileof"
:
File*file;
readcout:
read<
writecout:
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版)庞丽萍、阳富民著。
5、收获、体会和建议
本次课程设计是一次将书本知识应用到实践考验。
经过此次设计,将课本和课堂所学的一些知识运用到程序中还是需要一定的努力,自学一些相关的知识。
在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,提高了自己解决问题的能力,知道了应该耐心的去解决程序中的问题和不足。
遇到问题时,应该认真去查阅资料,学习不懂的知识。
通过课程设计,对自己学习Linux操作系统有用的软件及对操作系统中文件管理系统的了解,更深一步掌握了操作系统的一些概念。
在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过在网上查询资料以及参考书本上的列题等,完成了此次课程设计。
附录源程序清单
/*
*模拟文件管理
*/#include<
iostream>
#include<
malloc.h>
string.h>
#include<
cstdlib>
usingnamespacestd;
*定义文件数据结构
*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告 设计 实现 一个 模拟 文件系统