模拟UNIX文件系统.docx

上传人:b****3 文档编号:10273087 上传时间:2023-05-24 格式:DOCX 页数:53 大小:390.58KB
下载 相关 举报
模拟UNIX文件系统.docx_第1页
第1页 / 共53页
模拟UNIX文件系统.docx_第2页
第2页 / 共53页
模拟UNIX文件系统.docx_第3页
第3页 / 共53页
模拟UNIX文件系统.docx_第4页
第4页 / 共53页
模拟UNIX文件系统.docx_第5页
第5页 / 共53页
模拟UNIX文件系统.docx_第6页
第6页 / 共53页
模拟UNIX文件系统.docx_第7页
第7页 / 共53页
模拟UNIX文件系统.docx_第8页
第8页 / 共53页
模拟UNIX文件系统.docx_第9页
第9页 / 共53页
模拟UNIX文件系统.docx_第10页
第10页 / 共53页
模拟UNIX文件系统.docx_第11页
第11页 / 共53页
模拟UNIX文件系统.docx_第12页
第12页 / 共53页
模拟UNIX文件系统.docx_第13页
第13页 / 共53页
模拟UNIX文件系统.docx_第14页
第14页 / 共53页
模拟UNIX文件系统.docx_第15页
第15页 / 共53页
模拟UNIX文件系统.docx_第16页
第16页 / 共53页
模拟UNIX文件系统.docx_第17页
第17页 / 共53页
模拟UNIX文件系统.docx_第18页
第18页 / 共53页
模拟UNIX文件系统.docx_第19页
第19页 / 共53页
模拟UNIX文件系统.docx_第20页
第20页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

模拟UNIX文件系统.docx

《模拟UNIX文件系统.docx》由会员分享,可在线阅读,更多相关《模拟UNIX文件系统.docx(53页珍藏版)》请在冰点文库上搜索。

模拟UNIX文件系统.docx

模拟UNIX文件系统

*******************

实践教学

*******************

 

兰州理工大学

计算机与通信学院

2013年秋季学期

 

操作系统原理课程设计

 

题目:

模拟UNIX文件系统

专业班级:

计算机科学与技术基地班

姓名:

关世伟

学号:

11250307

指导教师:

王旭阳

成绩:

目录

摘要2

正文3

1、问题描述3

2、算法思想3

3、各模块伪码算法4

4、函数调用关系图17

5、测试....................................................................................18

设计总结24

参考文献25

致 谢26

附录源程序27

 

摘要

本设计主要是针对模拟UNIX文件管理所做的,按照任务书的说明,在对针对UNIX文件系统设计中主要是通过C++对其功能进行描述,首先是对多用户的描述,对其用数组进行描述,在对其后的单用户登录login通过函数进行描述,这样提高了文件和数据的安全性可靠性,当输入的和用户名以及密码一致时进入系统进行操作,还有就是对文件的创建,打开,写,读,文件的删除,关闭,以及建立目录,改变当前目录,都是通过功能函数在其中实现其功能。

关键词:

多用户登录,文件的访问权限,目录设计,UNIX文件系统

正文

1.问题描述

该设计是针对UNIX系统所做的文件系统,其关键在于模拟,模拟文件操作的一些性质,及其应用。

利用WindowsSDK(SystemDevelopmentKit)提供的API(应用程序接口)编写程序实现文件系统的基本功能:

多用户:

usr1,usr2,usr3,……,

usr8(1-8个用户)、多级目录:

可有多级子目录、具有login(用户登录)、系统初始化(建文件卷、提供登录模块)、文件的创建:

create、文件的打开:

open、文件的读:

read、文件的写:

write、文件关闭:

close、删除文件:

delete、创建目录(建立子目录):

mkdir、改变当前目录:

cd、列出文件目录:

dir、退出:

logout。

首先系统要完成初始化的任务,建立起整个系统,等待用户登录使用文件系统,用户登录模块,对用户的用户名和密码进行验证(允许用户用限次的尝试),如果用户登录成功,显示“本文件系统文件目录”,其中有八个用户,从user1到user8。

我们可根据自己的需要选择用户。

选择以后,显示对每个文件的操作,其中有打开,读,写,关闭,删除,新建,注销用户,退出系统等目录显示。

可根据我们的具体需要选择我们所要的功能。

2.算法思想

模拟UNIX的文件系统的算法采用C++编写,其用两个结构体去表示多用户以及单用户的多文件的系统管理,然后对于文件的创建,打开,关闭,删除,创建子目录,改变当前目录等创建功能函数,最后在主函数里面再对磁盘进行初始化,开始运行程序功能,并采取UNIX的文件系统方法对其进行文件操作

 

3.各模块伪码算法

3.1创建结构体表示多用户以及单用户的多个文件

structFiles

{

stringfilename;////文件名

intf_Owner;////所有者(0~7)

stringr_time;////文件最后修改时间

intf_size;////文件大小

stringcont;////文件内容

Files*next;////指向下一个文件的指针

};

structFolder

{

intOwner;////所有者(0~7)

stringfoldername;////文件夹名字

stringm_time;////文件夹创建时间

Folder*folders;////存放文件夹指针

Files*file;////存放文件指针

Folder*fparent;////指向路径父节点的指针

Folder*next;////指向同一层下一文件夹的指针

};

3.2时间函数用于表示文件的创建时间

char*Time()

{

time_ttm;

tm=time(0);

char*t;

t=ctime(&tm);

returnt;

}

3.3创建目录

voidMkdir(Folder*&Target,string&Name,intUnum)

{

Folder*pd=Target->folders;

while(pd!

=NULL)

{

if(pd->foldername==Name)

{

cout<<"子目录"<

"<

return;

}

pd=pd->next;

}

Folder*md=newFolder;

md->file=NULL;

md->m_time=Time();

md->foldername=Name;

md->folders=NULL;

md->fparent=Target;

md->next=NULL;

md->Owner=Unum;

if(Target->folders==NULL)

{

Target->folders=md;

}

else

{

pd=Target->folders;

while(pd->next!

=NULL)

{

pd=pd->next;

}

pd->next=md;

}

md=NULL;

return;

}

3.4改变当前目录

voidCd(Folder*list,Folder*&Target,string&Name,string&path)

{

if(Name=="C"||Name=="D"||Name=="E"||Name=="c"||Name=="d"||Name=="e")

{

if(Name=="C"||Name=="c")

{

Target=list;

path="C:

\\>";

return;

}

if(Name=="D"||Name=="d")

{

Target=list->next;

path="D:

\\>";

return;

}

if(Name=="E"||Name=="e")

{

Target=list->next->next;

path="E:

\\>";

return;

}

}

if(".."==Name)

{

if(Target->fparent==NULL)

{

cout<<"此目录已经为根目录!

"<

return;

}

else

{

intn=Target->foldername.size()+2;

path=path.substr(0,path.size()-n);

path+=">";

Target=Target->fparent;

return;

}

}

else

{

Folder*pcd=Target->folders;

if(pcd==NULL)

{

cout<<"系统找不到指定的路径"<

return;

}

do

{

if(pcd->foldername==Name)

{

Target=pcd;

intn=path.find(">");

stringpname=Name+"\\";

path.insert(n,pname);

return;

}

else

{

pcd=pcd->next;

}

}while(pcd!

=NULL);

cout<<"系统找不到指定的路径"<

}

return;

}

voidDir(Folder*&Target)//列出文件目录

{

if((Target->folders==NULL)&&(Target->file==NULL))

{

cout<<"文件夹为空"<

return;

}

else

{

Folder*pdir=NULL;

Files*pfdir=NULL;

if(Target->folders!

=NULL)

{

pdir=Target->folders;

do

{

for(inti=0;i<(pdir->m_time.size()-1);i++)

{

cout<m_time[i];

}

cout<<""<<"

"<<'\t'<<"User"<Owner<<'\t'<foldername<

pdir=pdir->next;

}while(pdir!

=NULL);

cout<

}

if(NULL!

=Target->file)

{

pfdir=Target->file;

do

{

for(intf=0;f<(pfdir->r_time.size()-1);f++)

{

cout<r_time[f];

}

cout<<""<<""<<'\t'<<"User"<f_Owner<<'\t'<filename<<'\t'<<'\t'<<"size:

"<f_size<

pfdir=pfdir->next;

}while(pfdir!

=NULL);

}

}

return;

}

3.5文件的创建

voidCreate(Folder*&Target,string&Name,intUnum)

{

Files*fp=Target->file;

Files*pdfp=NULL;

while(fp!

=NULL)

{

if(fp->filename==Name)

{

cout<<"文件"<

"<

return;

}

pdfp=fp;

fp=fp->next;

}

Files*cf=newFiles;

cf->f_Owner=Unum;

cf->f_size=cf->cont.size();

cf->filename=Name;

cf->next=NULL;

cf->r_time=Time();

if(Target->file==fp)

{

Target->file=cf;

}

else

{

pdfp->next=cf;

}

return;

}

Files*Open(Folder*&Target,string&Name)/*文件的打开*/

{

Files*fp=Target->file;

BOOLstate=FALSE;

while(fp!

=NULL)

{

if(fp->filename==Name)

{

state=TRUE;

break;

}

fp=fp->next;

}

if(state==FALSE)

{

cout<<"没有找到路径文件"<

"<

}

returnfp;

}

voidRead(Folder*&Target,string&Name)/*文件的读*/

{

Files*pr=Open(Target,Name);

if(pr!

=NULL)

{

if((pr->cont.size())==0)

{

cout<<"文件内容为空!

"<

return;

}

else

{

for(intn=0;n<=pr->cont.size();n++)

{

cout<cont[n];

Sleep(50);

}

cout<

cout<

}

}

else

{

cout<<'\a'<<"非法操作!

"<

}

}

voidWrite(Folder*&Target,string&Name,intUnum)/*文件的写*/

{

Files*pw=Open(Target,Name);

if(pw!

=NULL)

{

if(pw->f_Owner==Unum)

{

cout<<"输入文本,请以\"%\"结束输入!

"<

getline(cin,pw->cont,'%');

pw->r_time=Time();

pw->f_size=pw->cont.size();

}

else

{

cout<<"警告:

用户没有权限执行当前操作!

"<

return;

}

}

else

{

cout<<'\a'<<"非法操作!

"<

}

return;

}

3.6文件关闭

voidClose(Folder*&Target,string&Name)

{

cout<<"关闭文件"<

"<

return;

}

3.7文件的删除

voidDelete(Folder*&Target,string&Name,intUnum)/*删除文件*/

{

Files*pfd=NULL;

Files*pre=NULL;

boolf_state=false;

if(Target->file==NULL)

{

cout<<"找不到所要删除的目录!

"<

return;

}

else

{

pfd=Target->file;

pre=Target->file;

do

{

if(pfd->filename==Name)

{

f_state=true;

break;

}

pre=pfd;

pfd=pfd->next;

}while(pfd!

=NULL);

}

if(f_state)

{

if(pfd->f_Owner==Unum)

{

charok;

cout<<"删除"<filename<<","<<"是否确认?

";

cin>>ok;

if(ok=='Y'||ok=='y')

{

if(Target->file==pre)

{

Target->file=pfd->next;

deletepfd;

pfd=NULL;

return;

}

else

{

if(pfd->next!

=NULL)

{

pre->next=pfd->next;

deletepfd;

pfd=NULL;

}

if(pfd==NULL)

{

pre->next=NULL;

}

}

}

}

else

{

cout<<"警告:

用户没有权限执行当前操作!

"<

return;

}

}

else

{

cout<<"找不到所要删除的文件!

"<

}

return;

}

3.8休眠函数

voidchange()

{

for(inta=0;a<4;a++)

{

Sleep(500);

cout<<'.';

}

}

3.9退出函数

voidlogout()/*退出*/

{

cout<

cout<

change();

system("cls");

}

4.函数调用关系图

4.1用户选择函数如图所示

4.2程序执行基本流程

5.测试

5.1欢迎界面

 

5.2用户选择界面

5.3用户登录界面

5.4帮助界面

 

5.5创建目录

5.6创建并显示文件

5.7创建另一个目录并创建文件

 

5.8写文件

5.9读文件

 

5.10显示当前目录和文件

5.11在当前目录下创建新目录并创建文件进行读写操作

5.12错误操作

5.13显示子目录下的文件

5.14退出当前操作

 

设计总结

本次的操作系统课程设计是对自己的一个提高,自己分配的题目是模拟UNIX文件系统,刚开始自己对这个茫然无知,但是自己经过去图书馆查询资料借书自己看,慢慢的对UNIX系统有了初步的了解,同时对自己的课设任务也有了一定的认识,慢慢的觉得自己也可以做这个了。

本学期的操作系统让我对计算机的软件基础有了初步的认识,模拟UNIX文件系统也是基于操作系统的所做的一个方面的事情,要求是对于多用户进行的文件管理,对于文件要进行一般的操作比如创建,打开,读写操作,以及目录的建立和改变当前目录,通过对UNIX系统的了解,我选择了C++来设计改程序,在编写源代码的过程中,自己过对于目录的创建,还有对当前目录的修改方面还是很是不理解,但是经过自己在网上查询资料,再看别人写的源程序关于这两个方面的描述,自己在一段时间内将源程序写出,并经过修改终于实现了所要求的功能,而后自己参考别人的源代码,将自己的程序设计的更加合理化,加上时间方面的处理,使之在文件创建的时候记录创建时间,并在最后查看的时候显示时间,并且对于开始界面和结束界面也做了一定的处理。

经过本次的课程设计,自己对于操作系统中的文件管理方面的认识更加的深刻,尤其是在对文件的处理方面自己做的更是得心应手了,而且自己查了很多的资料,完善了自己在这方面的不足,增强了自主学习的能力,我相信,下次自己能做的更好!

 

参考文献

1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.

2.王清,李光明.《计算机操作系统》.冶金工业出版社.

3.孙钟秀等.操作系统教程.高等教育出版社

4.曾明. Linux操作系统应用教程.陕西科学技术出版社.

5.张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社.

6.孟静, 操作系统教程--原理和实例分析.高等教育出版社

7.周长林,计算机操作系统教程.高等教育出版社

8.张尧学,计算机操作系统教程,清华大学出版社

 

致谢

本次的课程设计过程中,自己存在很多的问题在自身的努力下并没有得到很好地解决,多亏了周围同学们对自己的帮助,以及老师对自己的指点,才能使自己在很短的时间内完成自己的任务,在此深深地感谢他们,你们辛苦了!

 

附录源程序:

#include

#include

#include

#include

#include

#include

#defineFOLDER

usingnamespacestd;

structFiles

{

stringfilename;////文件名

intf_Owner;////所有者(0~7)

stringr_time;////文件最后修改时间

intf_size;////文件大小

stringcont;////文件内容

Files*next;////指向下一个文件的指针

};

structFolder

{

intOwner;////所有者(0~7)

stringfoldername;////文件夹名字

stringm_time;////文件夹创建时间

Folder*folders;////存放文件夹指针

Files*file;////存放文件指针

Folder*fparent;////指向路径父节点的指针

Folder*next;////指向同一层下一文件夹的指针

};

//多用户:

usr1,usr2,usr3,……,usr8(1-8个用户)、多级目录:

可有多级子目录、具有login(用户登录)、

//系统初始化(建文件卷、提供登录模块)、文件的创建:

create、文件的打开:

open、文件的读:

read、文件的写:

write、

//文件关闭:

close、删除文件:

delete、创建目录(建立子目录):

mkdir、改变当前目录:

cd、列出文件目录:

dir、退出:

logout。

stringUserName[8]={"billjames","user1","user2","user3","user4","user5","user6","user7"};

stringPassWord[8]={"12345","12345","12345","12345","12345","12345","12345","12345"};

stringconstMethods[11]={"create","open","read","write","close","fdelete","mkdir","cd","dir","help","logout"};

char*Time()

{

time_ttm;

tm=time(0);

char*t;

t=ctime(&tm);

returnt;

}

voidMkdir(Folder*

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

当前位置:首页 > 求职职场 > 简历

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

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