操作系统文件系统的设计与实现课程设计Word文档下载推荐.docx
- 文档编号:19466567
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:28
- 大小:139.87KB
操作系统文件系统的设计与实现课程设计Word文档下载推荐.docx
《操作系统文件系统的设计与实现课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统的设计与实现课程设计Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
2.2程序功能图
文件系统提供的文件操作有建立文件(mkfile)、复制文件(copy)、显示文件所有内容(type)、删除文件(delfile)。
可以通过键盘输入命令来模拟文件的操作。
2.3程序流程图
(1)主程序流程图:
(2)初始化模块流程图:
(3)写入磁盘流程图:
(4)显示目录流程图:
(5)显示文件流程图:
(6)删除文件流程图:
(7)复制文件流程图:
(8)创建文件流程图:
第三章程序运行结果及分析
3.1程序运行结果
(1)程序主界面
(2)创建一个文件,输入“3”显示“输入文件内容,按@键保存且退出!
”
(3)往文件里写内容:
HelloWorld!
显示文件长度,并要求给文件命名,命名后保存返回主界面
(4)读取刚才写入的文件,结果正确
(5)删除刚写入的文件,测试成功
3.2程序分析
本程序使用一个Windows下的文件来模拟一个磁盘,向磁盘中装入文件并进行相关操作。
采用了以空间换时间的算法,文件的大小在系统中是固定的,虽然会浪费一些空间,但文件的存取速率会加快。
第四章心得体会
操作系统课程设计是本课程重要的实践教学环节。
课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;
另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。
与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。
在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不过设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师的身上我学得到很多实用的知识,再次我表示感谢!
同时,对给过我们帮助的所有同学和各位指导老师再次表示忠心的感谢!
在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。
在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单,可以使我们的查错与纠错变的更方便。
总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。
我相信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展和提高。
参考文献
1.教材
[1]张尧学主编.计算机操作系统教程(第三版).北京:
清华大学出版社,2006
2.主要参考书
[1]张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:
[2]汤子瀛主编.计算机操作系统(第三版).西安:
西安电子科技大学出版社,2001
[3]张坤等编.操作系统实验教程.北京:
清华大学出版社,2008
[4]张丽芬等编.操作系统实验教程.北京:
[5]AndrewS.Tanenbaum.ModernOperatingSystems,SecondEdition.EnglewoodCliffs,N.J,PrenticeHall,2001
[6]屠祁等编.操作系统基础(第三版).北京:
清华大学出版社,2000
[7]冯耀霖等编.操作系统.西安:
西安电子科技大学出版社,2001
[8]左万历.计算机操作系统教程(第二版).北京:
高等教育出版社,2004
附录程序清单
#include"
iostream.h"
string"
stdio.h"
extern"
C"
voidexit(int);
structfilename//文件目录项结构体
{
charname[12];
charext[8];
//扩展名//扩展名较小设为10
}file[20];
intnum;
structempty//盘块结构体
{intmap[20];
intfilenum;
}emptytable;
//模块说明:
voidSystemInit()//模拟磁盘文件初始化函数
{
for(inti=2;
i<
19;
i++){//初始化存放位示图的盘块
emptytable.map[i]=0;
}
emptytable.map[0]=1;
emptytable.map[1]=1;
emptytable.filenum=0;
FILE*fp;
if((fp=fopen("
filesys"
"
wb+"
))==NULL)//wb+:
为读写建立一个"
新"
文件;
打开系统文件将文件目录盘块和用“w”打开的文件只能向该文件写入。
若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
+:
读和写
{//位示图盘块写入系统文件
printf("
cannotopenfile\n"
);
exit(0);
}
fseek(fp,512L,0);
//intfseek(FILE*stream,longoffset,intfromwhere);
函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere(偏移起始位置:
文件头0,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。
如果执行失败(offset超过文件自身大小),则不改变stream指向的位置。
成功,返回0,否则返回其他值。
fwrite(&
emptytable,sizeof(structempty),1,fp);
//把结构体emptyable中的内容写入到fp中,数据项的大小为structempty,数据项的个数为1
fclose(fp);
printf("
!
!
初始化系统成功!
"
voidWriteFile()//将目录以及空闲盘块表写入磁盘
rb+"
))==NULL)
{
rewind(fp);
//将文件内部的位置指针重新指向一个流(数据流/文件)的开头
for(inti=0;
num;
i++)
fwrite(&
file[i],sizeof(structfilename),1,fp);
//文件目录
//位示图
voiddir()//显示文件目录
{inti,j;
rb"
{printf("
}
//空闲盘块表的定位
fread(&
//文件目录表的定位
num=emptytable.filenum;
for(i=0;
if(num!
=0)
系统所有文件:
\n"
for(i=0,j=1;
i++,j++)
{
%s.%s"
file[i].name,file[i].ext);
if(j==5)
{printf("
j=1;
}
\n文件数量为%d"
num);
voidtype()//显示文件内容
inti,j;
for(i=0,j=0;
{fread(&
if(j==5)printf("
charname[12],ext1[8];
请输入所要查询的文件名:
gets(name);
//scanf("
%s"
name);
//getchar();
请输入扩展名:
gets(ext1);
ext1);
getchar();
if(*(name+0)=='
\0'
)
文件名不能为空!
\n"
return;
if(*ext1=='
)
strcpy(ext1,"
txt"
intsign=0;
for(i=0;
if((strcmp(file[i].name,name)==0)&
&
(strcmp(file[i].ext,ext1)==0))
---所找文件为第%d个文件----\n"
i+1);
sign=1;
break;
if(sign==0)
无此文件\n"
//显示文件
intb,m,n;
b=file[i].i;
n=file[i].size;
---该文件位于第%d块\n"
b+1);
---从文件读出的文件长度为:
%d---\n"
n);
//fseek(fp,b*512L,0);
charcc;
---文件内容为:
---\n"
"
for(m=0,j=1;
m<
n;
m++,j++)
fseek(fp,b*512L+m,0);
//fread(&
cc,sizeof(char),1,fp);
cc=fgetc(fp);
%c"
cc);
if(j%40==0)printf("
\n"
voiddelfile()//删除一个文件
r"
请输入文件名:
gets(ext1);
if(*name=='
){
return;
if(*ext1=='
)strcpy(ext1,"
charjudge;
是否删除文件%s.%s[y/n]"
name,ext1);
scanf("
&
judge);
getchar();
if((judge=='
y'
)||(judge=='
Y'
))
准备删除文件%s.%s!
elseif((judge=='
n'
N'
))return;
else
{
系统默认放弃!
i++){
if((strcmp(file[i].name,name)==0)&
(strcmp(file[i].ext,ext1)==0))
{
sign=1;
break;
if(sign==0)
{printf("
文件名错\n"
return;
//回收空间
intb=file[i].i;
intAmount=file[i].Amount;
intj;
for(j=0;
j<
Amount;
j++)
emptytable.map[b++]=0;
for(j=i;
num-1;
{
strcpy(file[j].name,file[j+1].name);
strcpy(file[j].ext,file[j+1].ext);
file[j].i=file[j+1].i;
file[j].size=file[j+1].size;
file[j].Amount=file[j+1].Amount;
emptytable.filenum=emptytable.filenum-1;
WriteFile();
删除成功!
voidcopy()//复制一个文件
FILE*fq;
inti,j,sign;
if((fq=fopen("
))==NULL){
exit(0);
fseek(fq,512L,0);
emptytable,sizeof(structempty),1,fq);
rewind(fq);
fread(&
file[i],sizeof(structfilename),1,fq);
}//for
charSourceName[12],DestName[12],ext1[8],ext2[8];
请输入源文件名:
gets(SourceName);
SourceName);
请输入源文件扩展名:
请输入目标文件名:
gets(DestName);
DestName);
请输入目标扩展文件名"
gets(ext2);
ext2);
if(*ext2=='
)strcpy(ext2,"
if((*SourceName)=='
||(*DestName)=='
){
printf("
错误!
文件名不能为空!
if(strcmp(SourceName,DestName)==0){
两个文件名不能相同!
sign=0;
if(strcmp(SourceName,file[i].name)==0)
{sign=1;
strcpy(file[num].name,DestName);
strcpy(file[num].ext,ext2);
//file[num].i=file[i].i;
file[num].size=file[i].size;
file[num].Amount=file[i].Amount;
break;
}//for
printf("
不存在源文件\n"
return;
}
if(i<
num)
输入的文件名与第%d个源文件相等(i从0开始)\n"
i);
//空间分配
for(intm=2;
=19-file[num].Amount;
m++)//********************
if(emptytable.map[m]==0)
for(j=file[i].Amount;
j>
0;
j--){//寻找一连续的空闲盘块
if(emptytable.map[m+j-1]==1)
{
sign=1;
break;
}//if
}//for
if(sign==0)break;
m+=j-1;
sign=0;
}//for
if(m<
=19-file[num].Amount){
for(j=0;
j<
file[num].Amount;
j++)emptytable.map[m+j]=1;
file[num].i=m;
没有足够的连续的盘块数"
//写数据
FILE*fq1;
fq1=fq;
fseek(fq,(file[i].i)*512L,0);
\n---源文件的起始盘块号:
%d"
file[i].i);
//rewind(fp1);
fseek(fq1,(file[num].i)*512L,0);
\n---复制文件的起始盘块号:
file[num].i);
\n---源文件内容为:
for(intk=0;
k<
file[i].size;
k++)
fseek(fq,(file[i].i)*512L+k,0);
cc,sizeof(char),1,fq);
fseek(fq1,(file[num].i)*512L+k,0);
cc,sizeof(char),1,fq1);
num=num+1;
emptytable.filenum=num;
//写目录及位示图
fclose(fq);
fclose(fq1);
voidmkfile()//建立一个文件
{FILE*fp;
r+"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统 设计 实现 课程设计