操作系统课程设计Linux二级文件系统设计.docx

上传人:wj 文档编号:4857952 上传时间:2023-05-07 格式:DOCX 页数:22 大小:225.98KB
下载 相关 举报
操作系统课程设计Linux二级文件系统设计.docx_第1页
第1页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第2页
第2页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第3页
第3页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第4页
第4页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第5页
第5页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第6页
第6页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第7页
第7页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第8页
第8页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第9页
第9页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第10页
第10页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第11页
第11页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第12页
第12页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第13页
第13页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第14页
第14页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第15页
第15页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第16页
第16页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第17页
第17页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第18页
第18页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第19页
第19页 / 共22页
操作系统课程设计Linux二级文件系统设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统课程设计Linux二级文件系统设计.docx

《操作系统课程设计Linux二级文件系统设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计Linux二级文件系统设计.docx(22页珍藏版)》请在冰点文库上搜索。

操作系统课程设计Linux二级文件系统设计.docx

操作系统课程设计报告

操作系统课程设计报告

专业:

软件工程

学号:

姓名:

提交日期:

2017/1/10

【设计目的】

1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现

2、结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统

3、通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力

【设计内容】

为Linux系统设计一个简单的二级文件系统。

要求做到以下几点:

1.可以实现下列几条命令:

login用户登录

dir列目录

create创建文件

delete删除文件

open打开文件

close关闭文件

read读文件

write写文件

cd进出目录

2.列目录时要列出文件名,物理地址,保护码和文件长度

3.源文件可以进行读写保护

【实验环境】

C++

DevCpp

【设计思路】

本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。

另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。

首先应确定文件系统的数据结构:

主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。

用户创建的文件,可以编号存储于磁盘上。

如:

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*/

{

charufdname[MAXNAME];/*ufdname*/

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相当于置换文件*/

程序流程说明:

整体流程:

开始

Login(Name/Pw/Cpw)

文件

打开文件

删除文件

文件

更改目录

修改文件属性

读文件

关闭文件

退出系统

清屏

添加

覆盖

结束

各部分功能流程:

Open:

开始

Open

获取文件名

文件是否存在?

(file>0)

文件名不存在

获取文件

置为打开状态

并获取文件模式

打开文件成功

结束

N N

Y

Delete:

开始

Delete

主目录是否为空?

Y

确认删除文件在用户目录下!

N

用户是否在用户目录下?

N

只能修改用户目录下的文件!

Y

接收删除文件名

获取文件

文件被打开或被保护?

Y

打开或被保护状态不可删除

N

获取物理块号

文件向前移动

删除文件,文件数减一

删除文件成功!

结束

Write:

开始

Write

用户是否在目录下?

N

文件不存在!

Y

获取文件

确认该文件被打开

文件权限为只写或读写

N

文件为只读和保护,不允许写!

Y

获取路径

0—追加,1—覆盖?

1

覆盖

0

追加

文件写入成功!

结束

Close:

开始

Close

N

用户是否在目录下?

请确认要关闭的文件是在用户目录下!

Y

罗列已经打开的文件

获取文件名

获取物理地址

文件是否处于关闭状态?

Y

该文件已被关闭

N

关闭文件

文件成功关闭

结束

【源程序清单】

Open:

voidOpenF()/*OpenFile*/

{

printf("\n\nC:

\\%s>",strupr(dirname)); //显示当前路径

intfcoun,i; //定义两个整形变量

charfname[MAXNAME],fmode[25]; //定义两个字符串变量

intfmod; //文件模式

printf("\nPleaseinputFileName:

");

gets(fname); //接收打开文件的文件名

ltrim(rtrim(fname)); //去除左右空白

if(ExistF(fname)<0) //判断文件是否存在

{ //不存在

printf("\nError.文件名\'%s\'不存在\n",fname);

wgetchar=1;

}else{ //存在

i=ExistD(username); //获取用户物理信息

for(inta=0;a

{

if(strcmp(fname,ufd[i]->ufdfile[a].fname)==0)//找到文件

{

fcoun=a;

break;

}

}

ifopen[i][fcoun].ifopen=1; //将文件状态置为打开状态

printf("PleaseinputOpenMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect):

"); //打开文件模式

gets(fmode); //获取模式

fmod=atoi(fmode); //将字符串转换为整型

ifopen[i][fcoun].openmode=fmod; //将文件的模式置为OpenMode

printf("\nOpenSuccessed");

wgetchar=1;

}

}

Delete:

voidDeleteF()/*DeleteFile*/

{

printf("\n\nC:

\\%s>",strupr(dirname)); //显示路径

charfname[MAXNAME],str[50],str1[50]; //定义三个字符串变量

inti,k,j;

intfpaddrno1; //记录文件物理地址块号

if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0){//判断主目录是否为空

printf("\nError.请确认您要删除的是否在用户目录下!

\n");

wgetchar=1;

}

if(strcmp(strupr(dirname),strupr(username))!

=0){//判断用户是否在用户目录下

printf("\nError.您只能删除修改自己用户目录下的文件哦!

\n");

wgetchar=1;

}else{

printf("\nPleaseinputFileName:

");

gets(fname); //接收删除的文件名

ltrim(rtrim(fname)); //去除文件名的左右空白

i=ExistF(fname); //用户文件位置

if(i>=0){

k=ExistD(username); //获取用户所在存储位置

if(ifopen[k][i].ifopen==1){ //文件状态处于打开状态,不许删除

printf("\nError.\'%s\'处于打开状态!

请先关闭哟!

\n",fname);

wgetchar=1;

}else{

if(ufd[k]->ufdfile[i].fmode==3){ //保护文件,不可删除

printf("\nError.\'%s\'处于被保护状态!

请先关闭哟!

\n",fname);

wgetchar=1;

}else{

fpaddrno1=ufd[k]->ufdfile[i].fpaddr;//获取文件的物理地址块号

fpaddrno[fpaddrno1]=0;//回收物理地址块号

for(j=i;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--]; //文件个数减一

printf("\n\'%s\'isdeletedsuccessfully.\n",fname);

wgetchar=1;

}

}

}else{

printf("\nError.\'%s\'文件不存在!

\n",fname); //文件不存在

wgetchar=1;

}

}

}

Write:

voidWriteF()/*WriteFile*/

{

printf("\n\nC:

\\%s>",strupr(dirname)); //显示用户路径

inti,k,m=0; //定义整形变量

intlength; //定义长度整形变量

charfname[MAXNAME]; //定义文件名字符串

charstr[255],str1[255]; //定义两个字符串变量

if(strcmp(strupr(dirname),strupr(username))!

=0){//判断用户是否在用户目录下

printf("\nError!

请确认您要写的在用户目录下!

\n");

wgetchar=1;

return;

}

printf("\n请先打开文件!

\n");

printf("OpenedFile(s)List:

\n");

k=ExistD(dirname); //获取用户文件信息

for(i=0;i

{

if(ifopen[k][i].ifopen==1){ //文件处于打开状态

printf("%15s",ufd[k]->ufdfile[i].fname);

m++;

}

if(m%4==0&&m!

=0) //每创建4个文件换一行

printf("\n");

}

printf("\n%d文件已经打开啦!

\n",m);

if(m==0)

wgetchar=1;

if(m!

=0) //创建文件

{

printf("\nPleaseinputFileName:

");

gets(fname); //接收文件名

ltrim(rtrim(fname)); //去除左右空白

i=ExistF(fname); //获取文件物理地址

if(i>=0){ //文件存在

if(ifopen[k][i].ifopen==1){ //文件处于打开状态

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,"c:

\\osfile\\file\\");

strcat(str,str1);

strcat(str,".txt"); //文件路径

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();

ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+length; //修改文件长度

if(choice==0)

ufd[k]->ufdfile[i].flength=length;

printf("\n\nYouhavewritefilesuccessfully!

!

!

");

fclose(fp_file);//关闭文件

wgetchar=0;

}elseif(ifopen[k][i].openmode==0){ //文件处于只读状态,不允许写

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2