操作系统课程设计 2.docx
- 文档编号:25850355
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:20
- 大小:576.88KB
操作系统课程设计 2.docx
《操作系统课程设计 2.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计 2.docx(20页珍藏版)》请在冰豆网上搜索。
操作系统课程设计2
操作系统原理
课程设计报告
题目:
采用二级目录实现文件管理
所在学院:
班级:
学号:
姓名:
指导教师:
2013年1月15日
一、课程设计目的………………………………………………1
二、课题内容………………………………………………1
三、总体路线………………………………………………1
四、概要设计………………………………………………2
1.数据结构………………………………………………2
2.所使用函数及其功能……………………………………3
五、详细设计………………………………………………4
1.主函数流程图…………………………………………4
2.创建文件函数流程图……………………………………5
3.删除文件函数流程图……………………………………7
4.分解命令函数流程图……………………………………10
六、测试、修改及运行结果………………………………10
七、结束语………………………………………………13
八、参考文献………………………………………………14
一、课程设计目的
文件系统是现代OS用来存储和管理信息机构,具有按名存取的功能,不仅能方便用户对信息的使用,也有效提高了信息的安全性。
本课题模拟文件系统的目录结构,并在此基础上实现文件的各种操作方法。
通过本课题,深入理解文件文件目录的作用和功能,掌握文件打开结构,熟悉与文件有关的系统调用,从而更好地掌握文件系统概念。
二、课题内容
1.文件目录采用二级目录结构,第一级为主文件目录master_file_directory;第二级为用户文件目录user_file_directory。
用户名
用户文件目录地址
图1master_file_directory结构
文件名
文件保护方式
文件设置长度
文件所在地址
图2user_file_directory结构
2.为加速文件存取,为每个用户建立一张用户打开表fileTable,用以记录该用户当前正在使用的文件。
文件名
文件长度
文件所在地址
文件类型
创建文件时间
图3fileTable结构
3.为该系统提供6条操作命令:
创建、打开、读、写、关闭、删除等。
4.在该模拟系统中,应先建立主文件目录、用户目录和用户打开文件表,然后接受合法用户,给出一个菜单,按用户选择执行相关操作。
三、总体路线
1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。
在退出这个简单的文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。
2.文件存储空间的分配采用显式链接分配。
为了实现创建和删除文件必须要有一棵初始的文件树存在,以便在文件树的根节点下实现创建和删除文件。
3.文件目录结构采用二级目录结构。
为了简单起见,可以使用文件结构体,结构体内容包括:
文件名,文件目录识别标示,文件链接数,以及他的左孩子右孩子左兄弟右兄弟指
4.要有分解函数对输入的命令进行分解。
以识别那部分是哪部分是命令,哪部分是路径和文件名。
5.最后要有执行函数。
来执行输入的创建文件命令。
四、概要设计
1.数据结构
(1)函数中的主要结构体
//两级目录结构体
typedefstructmaster_file_directory//主文件目录MFD
{
charuserName[10];
charpassword[10];
UFD*user;
}MFD;
MFDuserTable[MaxUser];
intused=0;//定义MFD目录中用已有的用户数
typedefstructuser_file_directory//用户文件目录文件UFD
{
//charfileName[10];
fileTable*file;
user_file_directory*next;
}UFD;
//UFD*headFile;
typedefstructfileTable//文件块结构体
{
charfileName[10];
intstrat;//文件在磁盘存储空间的起始地址
intlength;//文件内容长度
intmaxlength;//文件的最大长度
charfileKind[3];//文件的属性——读写方式
structtm*timeinfo;
boolopenFlag;//判断是否有进程打开了该文件
//fileTable*next;
};
(2)结构体相互之间的调用关系图:
图4结构体关系图
2.模块结构
(1)所用函数及其功能:
voidInit();//初始化文件树
intParseCommand();//接受输入的命令并把其分解成操作名和路径文件名
voidExecuteCommand();//执行命令,分别执行edit,del,dir,exit命令
inteditComd();//处理edit命令,即创建文件,只要创建表示文件的节点即可,内容及大小不考虑
intdelComd();//处理del命令,即删除指定文件,不存在是给出错误信息
intdirComd();//处理dir命令。
问了能显示的看出创建文件和删除文件是否成功,把根目录的文件都显示出来
intFindFilename(charPara2[]);//查找文件名
structFileNode*CreateFileNode(charfilename[],intisdir,inti_nlink);//创建结点
intGetInput(char*buffer,unsignedintbuffer_len);//获取输入
(2)所使用变量
structFileNode*cp,*tp,*root;//*cp,*tp,*root是根目录节点
charpath[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径
charPara1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN];//para1数组存储输入的命令,para2数组存储输入的文件名
charfilename[FILENAME_LEN],tmp;
unsignedinti,j;
五、详细设计
1.主函数流程图
图5主函数流程图
2.创建文件函数流程图
图6创建文件函数流程图
具体函数实现过程如下:
inteditComd()
{
//chartmp;
structFileNode*temp=CreateFileNode("",0,0);
intsign;
structFileNode*tp;
//路径不能为空
if(strlen(Para2)==0)
{
printf("\n命令格式有错误.\n");
return0;
}
//长度检查
if(strlen(Para2)>50)
{
printf("\n文件名过长\n");
return0;
}
//格式检查
if(!
(isalpha(Para2[0])||Para2[0]=='_'||Para2[0]=='\0'||Para2[0]=='/'))
{
printf("文件名格式有错!
\n");/*文件首字母可以为'字母'或'数字'或'_'或'/'或'回车'*/
return0;
}
//获取文件名
sign=FindFilename(Para2);
if(sign==0)
return0;
if(cp->isdir!
=1)//如当前指针指向的是文件,则报错
{
printf("youcannoteditafileinunderafile!
\n");
return0;
}
//创建文件结点,并插入到指定目录下
tp=CreateFileNode("",1,0);
strcpy(tp->filename,filename);
tp->isdir=0;
tp->i_nlink=0;
if(cp->child==NULL)
{tp->parent=cp;
tp->child=NULL;
cp->child=tp;
tp->sibling_prev=NULL;
tp->sibling_next=NULL;
}
else
{temp=cp;
//用temp找到新结点插入处
temp=temp->child;
while(temp->sibling_next)//findthelastsibingnode
{
temp=temp->sibling_next;
if(strcmp(temp->filename,filename)==0&&temp->isdir==0)
{
printf("此文件名已存在\n");//重名报错
return0;
}
}//找到了最后一个结点
temp->sibling_next=tp;
tp->parent=NULL;
tp->child=NULL;
tp->sibling_prev=temp;
tp->sibling_next=NULL;
}
return1;
}
3.删除文件函数流程图
图7删除函数流程图
具体函数实现过程如下:
intdelComd()
{
//chartmp;
intsign;
structFileNode*temp;
//参数不能为空
if(strlen(Para2)==0)
{
printf("\n命令格式有错误.\n");
return0;
}
//获取文件名
sign=FindFilename(Para2);
if(sign==0)return0;
//用temp指向要删除的结点
if(cp->child)
{
temp=cp->child;
while(temp->sibling_next&&(strcmp(temp->filename,filename)!
=0||temp->isdir!
=0))
temp=temp->sibling_next;
if(strcmp(temp->filename,filename)!
=0)
{
printf("不存在该文件!
\n");
return0;
}
}
else
{
printf("不存在该文件!
\n");
return0;
}
//要删除的不能是目录
if(temp->isdir!
=0)
{
printf("ERROR!
该命令只能删除文件,不可删除目录!
\n");
return0;
}
//如仍有用户使用该文件,则不能删除
if(temp->i_nlink!
=0)
{
printf("还有用户共享了该文件,不能删除!
\n");
return0;
}
//删除工作
if(temp->parent==NULL)//不是第一个孩子
{
temp->sibling_prev->sibling_next=temp->sibling_next;
if(temp->sibling_next)//处理是最后一个兄弟的情况
temp->sibling_next->sibling_prev=temp->sibling_prev;
temp->sibling_prev=temp->sibling_next=NULL;
}//if
else//第一个孩子
{
if(temp->sibling_next)//处理是最后一个兄弟的情况
temp->sibling_next->parent=temp->parent;
temp->parent->child=temp->sibling_next;
}//else
free(temp);
return1;
}
4.分解命令函数流程图
图8分解命令函数流程图
六、测试修改及运行结果
1.实际运行结果:
初始界面
2.键入用户名和密码创建账号
3.登陆
4.文件操作
(1)创建文件
(2)写文件
(3)读文件
(4)显示文件
(5)关闭文件
(6)删除文件
七、结束语
虽然我们做过很多次课程设计了,但是感觉自己还有好多需要学习的地方,接到题目要求时,设计大体的框架,考虑好所使用的数据结构,然后用高级编程语言分模块的把架子的思路编写出来,调试,运行,再看看是不是符合题目的要求,上网找些资料,看看想想是不是要提高要求,才可以满足实际的需要,最后把收集的劳动成果组合起来,一个小程序终于成型了,虽然每次的过程差不多都一样,但是每次都会有不同的体会。
在这中间,敲代码,调试程序的过程比较枯燥,每次思考一个问题很久不能解决的时候,真的很想放弃它,试着找客观的原因,幸好,我的周围有学习好的同学,他们不仅帮我解答了我遇到的一些当时困扰着我的问题,还给了我很多鼓励,交流了一下做程序的思想,方法,跟我谈毅力,决心,还有什么是进步,这些是平时听老师讲课所学不到的,我收获不少。
通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和知识,加深了对文件系统基本概念的理解,以及磁盘文件系统的文件操作。
还有让我感受挺深的是对软件工程方法的应用。
设计一个软件,先要做好需求分析,这一点很重要,如果没有分析好需求,到软件设计的最后,发现所做的功能不符合要求,那么一切都得重做,前面所有的努力都付诸东流。
还有比较重要的是,画出语境级的数据流图,以及仔细画好程流程图。
在程序设计的开始,由于分析工作做得不够深入和细致,吃了点小苦头。
对于这样一个小设计来说,都会吃苦头,要是大工程更是无法想像,有可能会项目失败。
另外在运用C语言的时候,感觉有点生疏,在组织语言时时而出错,在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题的解决方案。
通过一周的努力,这次课程设计又要接近尾声了。
虽然课设当中遇到很多问题,但是最终问题基本都一一解决了。
通过这次课程设计的制作,加深了自己对
文件管理系统的了解与认识。
我相信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展和提高。
八、参考文献
[1]《C程序设计(第三版)》谭浩强清华大学出版社
[2]《计算机操作系统》西安电子科技大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统课程设计 操作系统 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)