操作系统课程设计Linux二级文件资料系统设计Word文档下载推荐.docx
- 文档编号:16313599
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:16
- 大小:162.35KB
操作系统课程设计Linux二级文件资料系统设计Word文档下载推荐.docx
《操作系统课程设计Linux二级文件资料系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计Linux二级文件资料系统设计Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
如:
file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
结构体:
typedefstruct/*thestructureofOSFILE*/
{
intfpaddr;
/*filephysicaladdress*/
intflength;
/*filelength*/
intfmode;
/*filemode:
0-ReadOnly;
1-WriteOnly;
2-ReadandWrite;
3-Protect;
*/
charfname[MAXNAME];
/*filename*/
}OSFILE;
//存放重要信息
typedefstruct/*thestructureofOSUFD*/
charufdname[MAXNAME];
/*ufdname*/
OSFILEufdfile[MAXCHILD];
/*ufdownfile*/
}OSUFD;
//用户下面的文件
typedefstruct/*thestructureofOSUFD'
LOGIN*/
charufdpword[8];
/*ufdpassword*/
}OSUFD_LOGIN;
typedefstruct/*fileopenmode*/
intifopen;
/*ifopen:
0-close,1-open*/
intopenmode;
/*0-readonly,1-writeonly,2-readandwrite,3-initial*/
}OSUFD_OPENMODE;
主要的函数说明:
voidLoginF();
/*LOGINFileSystem用户登录*/
voidDirF();
/*DirFileSystem列目录*/
voidCdF();
/*ChangeDir改变目录*/
voidCreateF();
/*CreateFile创建文件*/
voidDeleteF();
/*DeleteFile删除文件*/
voidModifyFM();
/*ModifyFileMode修改*/
voidOpenF();
/*OpenFile打开文件*/
voidCloseF();
/*CloseFile关闭文件*/
voidReadF();
/*ReadFile读文件*/
voidWriteF();
/*WriteFile写文件*/
voidQuitF();
/*QuitFileSystem离开文件系统*/
voidhelp();
其他重要函数:
voidclrscr()//清屏
intExistD(char*dirname)/*WhetherDirNameExist,Exist-i,NotExist-0*/
intExistF(char*filename)/*WhetherFileNameExist,Exist-i,NotExist-0*/
intFindPANo()/*findoutphysicaladdressnum*/
voidSetPANo(intRorW)/*Setphysicaladdressnum,0-read,1-write*/
voidInputPW(char*password)/*inputpassword,use'
*'
replace*/
char*ltrim(char*str)/*removetheheadingblanks.去除左空白*/
char*rtrim(char*str)/*removethetrailingblanks.去除右空白*/
intWriteF1()/*writefile相当于置换文件*/
程序流程说明:
整体流程:
各部分功能流程:
Open:
NN
Y
Delete:
Y
N
Y
Write:
Y
N
1
Close:
【源程序清单】
voidOpenF()/*OpenFile*/
printf("
\n\nC:
\\%s>
"
strupr(dirname));
//显示当前路径
intfcoun,i;
//定义两个整形变量
charfname[MAXNAME],fmode[25];
//定义两个字符串变量
intfmod;
//文件模式
\nPleaseinputFileName:
);
gets(fname);
//接收打开文件的文件名
ltrim(rtrim(fname));
//去除左右空白
if(ExistF(fname)<
0)//判断文件是否存在
{//不存在
\nError.文件名\'
%s\'
不存在\n"
fname);
wgetchar=1;
}else{//存在
i=ExistD(username);
//获取用户物理信息
for(inta=0;
a<
fcount[i];
a++)//遍历用户文件
{
if(strcmp(fname,ufd[i]->
ufdfile[a].fname)==0)//找到文件
fcoun=a;
break;
}
ifopen[i][fcoun].ifopen=1;
//将文件状态置为打开状态
PleaseinputOpenMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect):
//打开文件模式
gets(fmode);
//获取模式
fmod=atoi(fmode);
//将字符串转换为整型
ifopen[i][fcoun].openmode=fmod;
//将文件的模式置为OpenMode
\nOpenSuccessed"
}
voidDeleteF()/*DeleteFile*/
//显示路径
charfname[MAXNAME],str[50],str1[50];
//定义三个字符串变量
inti,k,j;
intfpaddrno1;
//记录文件物理地址块号
if(strcmp(strupr(ltrim(rtrim(dirname))),"
)==0){//判断主目录是否为空
\nError.请确认您要删除的是否在用户目录下!
\n"
if(strcmp(strupr(dirname),strupr(username))!
=0){//判断用户是否在用户目录下
\nError.您只能删除修改自己用户目录下的文件哦!
}else{
//接收删除的文件名
//去除文件名的左右空白
i=ExistF(fname);
//用户文件位置
if(i>
=0){
k=ExistD(username);
//获取用户所在存储位置
if(ifopen[k][i].ifopen==1){//文件状态处于打开状态,不许删除
\nError.\'
处于打开状态!
请先关闭哟!
if(ufd[k]->
ufdfile[i].fmode==3){//保护文件,不可删除
\nError.\'
处于被保护状态!
fpaddrno1=ufd[k]->
ufdfile[i].fpaddr;
//获取文件的物理地址块号
fpaddrno[fpaddrno1]=0;
//回收物理地址块号
for(j=i;
j<
fcount[k];
j++)//将文件都向前移动
ufd[k]->
ufdfile[j]=ufd[k]->
ufdfile[j+1];
//将j+1位置为j
strcpy(str,"
c:
\\osfile\\file\\"
itoa(fpaddrno1,str1,10);
//将整数转化为字符串
strcat(str,str1);
strcat(str,"
.txt"
//连接
remove(str);
//删除物理文件
fcount[k--];
//文件个数减一
\n\'
isdeletedsuccessfully.\n"
文件不存在!
//文件不存在
voidWriteF()/*WriteFile*/
//显示用户路径
inti,k,m=0;
//定义整形变量
intlength;
//定义长度整形变量
//定义文件名字符串
charstr[255],str1[255];
//定义两个字符串变量
=0){//判断用户是否在用户目录下
\nError!
请确认您要写的在用户目录下!
return;
\n请先打开文件!
OpenedFile(s)List:
k=ExistD(dirname);
//获取用户文件信息
for(i=0;
i<
i++)//遍历用户下的文件
if(ifopen[k][i].ifopen==1){//文件处于打开状态
%15s"
ufd[k]->
ufdfile[i].fname);
m++;
if(m%4==0&
&
m!
=0)//每创建4个文件换一行
\n%d文件已经打开啦!
m);
if(m==0)
if(m!
=0)//创建文件
//接收文件名
//获取文件物理地址
=0){//文件存在
if(ifopen[k][i].openmode==1||ifopen[k][i].openmode==2){//文件权限是只写或读写
itoa(ufd[k]->
ufdfile[i].fpaddr,str,10);
//获取文件路径
strcpy(str1,"
file"
strcat(str1,str);
strcpy(str,"
//文件路径
charstr2[3];
intchoice=3;
strcpy(str2,"
ab"
printf("
Youcanchoise[0-CoveredW][1-AdditonalW]:
//选择追加还是覆盖
scanf("
%d"
&
choice);
if(choice==0)//0-覆盖
strcpy(str2,"
wb"
fp_file=fopen(str,str2);
//打开文件
length=WriteF1();
ufdfile[i].flength=ufd[k]->
ufdfile[i].flength+length;
//修改文件长度
if(choice==0)
ufd[k]->
ufdfile[i].flength=length;
\n\nYouhavewritefilesuccessfully!
!
fclose(fp_file);
//关闭文件
wgetchar=0;
}elseif(ifopen[k][i].openmode==0){//文件处于只读状态,不允许写
文件以只读状态打开,不允许写!
文件处于关闭状态,请先打开!
}
文件不存在!
//文件不存在
voidCloseF()/*CloseFile*/
//显示路径
//定义字符串变量
inti,k,n=0;
=0)//关闭用户文件需在用户目录下
请确认您要关闭的是在用户目录下!
printf("
\n\nOpenedFile(s)List:
//罗列已处于打开的文件
k=ExistD(dirname);
for(i=0;
i<
i++)
{
if(ifopen[k][i].ifopen==1)//文件处于开启状态
if((ifopen[k][i].openmode==0)||(ifopen[k][i].openmode==2))//只读或者读写状态
{
ufd[k]->
n++;
}
if((n%4==0)&
(n!
=0))printf("
}
\n%d文件已被打开!
n);
if(n==0)wgetchar=1;
//接收关闭文件的文件名
//除去首尾空格
//获取文件物理地址
if(i>
=0)
//获取用户文件信息
if(ifopen[k][i].ifopen==0)//文件处于关闭状态
\'
文件已经被关闭!
}else{//将文件关闭
ifopen[k][i].ifopen=0;
ifopen[k][i].openmode=4;
hasbeenclosedsuccessfully!
文件不存在\n"
【测试结果】
(此部分请同学们自己动手操作)
Login:
Help:
Create:
Read:
1—additional
添加后变为:
0—covered
覆盖后变为:
Attrib:
Dir:
Cls:
(清屏)
Exit:
【设计总结】
首先通过这次的操作系统课程设计,让我认识到了实际的编程操作并不难,难的是对过程的设计,功能的定义以及最后的程序流程图的设计。
其次说一下我的认识,这次的课程设计使我对一些东西有了更加深刻的认知和了解,更重要的是巩固了新学的知识,以及对旧的知识进行了复习与了解,对一些细节方面的东西也有了更深刻的理解,所以这一次实践的机会,让我体会到了自己的不足之处,在以后的学习过程中,会加倍的认真努力。
让我对文件的操作更加熟练了,并且对Linux有了初步的了解。
其实这次课程设计,不能说很困难:
老师已经把大体的架构给我们了,我们需要添加的仅是四个功能的设计(open、write、delete、close)但是它又不是很容易,我们需要把整个的程序弄清,各个变量以及语句都要明白记住,这会关联到我们所定义的四个功能。
总算是把这次的课程设计搞定了,最让我开心的是课设完成之后看着自己的作品。
程序完整运行成功的那一瞬间最令我激动。
总之,这次的课设使我重新认识了不少,以后我会更加努力!
【参考文献】
计算机操作系统教程(第三版).张尧学史美林张高
计算机操作系统,西安电子科技大学出版社,方敏主编,2004.8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 Linux 二级 文件 资料 系统 设计