操作系统毕业课程设计说明书-基于Linux的模拟文件系统的设计与实现

发布时间:2017-10-09 19:56:24   来源:文档文库   
字号:

(此文档为word格式,下载后您可任意编辑修改!)

中北大学

操作系统课程设计

 

院、系

软件学院

软件工程

名:

徐春花

号:

基于Linux的模拟文件系统的设计与实现

:

2014614- 2014626

:

薛海丽

 

 

 2014 6 26

前言

简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。

Linux不仅为用户提供了强大的操作系统功能,而且还提供了丰富的应用软件。用户不但可以从Internet上下载Linux及其源代码,而且还可以从Internet上下载许多Linux的应用程序。可以说,Linux本身包含的应用程序以及移植到Linux上的应用程序包罗万象,任何一位用户都能从有关Linux的网站上找到适合自己特殊需要的应用程序及其源代码,这样,用户就可以根据自己的需要下载源代码,以便修改和扩充操作系统或应用程序的功能。这对Windows NTWindows98MS-DOSOS2等商品化操作系统来说是无法做到的。

Linux具有:稳定、可靠、安全的优点,并且有强大的网络功能。其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。在相关软件的支持下,可实现WWWFTPDNSDHCPE-mail等服务,还可作为路由器使用,利用IPCHAINSIPTABLE网络治理工具可构建NAT及功能全面的防火墙。

Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Windows图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统进行操作。

目录

1需求分析 3

1.1 功能介绍 3

1.2 目的及意义 5

1.2.1 目的 5

1.2.2 意义 6

1.3 设计成果 7

2总体设计 8

2.1功能介绍 8

2.2模块关联 9

3详细设计 12

3.1用户结构 12

3.2数据结构说明 12

3.3主要功能的关键代码 13

4测试及运行结果 18

4.1 测试定义 18

4.2 测试目的 18

4.3 测试结果 19

4.3.1 文件测试 19

5心得 23

1需求分析

1.1 功能介绍

基于Linux的模拟文件系统的设计与实现完成以下功能:

1)创建用户:手动的创建10个用户,都在界面上完成,输入用户名;每个用户最多可以保存10个文件。

2)用户登录:手动的登录已经创建的用户,正确输入用户名即可成功登录。

3)显示所有用户:首先会创建很多用户,为了清晰、便捷的查看用户,所以在界面上可以显示所有的用户,这一功能的实现,主要是针对忘记自己用户名的用户,可以通过查看全部用户来查找自己的用户名。

4)创建二级文件目录(MD):手动的输入目录名称,(即设置主目录(MFD)和用户文

件目录(UFD))。

5)显示目录:将用户创建的目录显示在界面上。

6)删除目录:手动输入目录的名称即可删除已经创建的目录。

7)进入目录:进入目录内部,可以进行文件的各种操作。

8)修改目录:在用户登录后,输入要修改的目录名称,对其进行修改,输入新的目

录名并保存。

9)建立一个文件(create):在目录中手动输入文件名,可以创建新的文件,在创建

的同时输入文件的保护码,对文件内容进行保护,防止信息泄露。

10)打开全部文件(openall):将已经创建的文件夹全部显示在界面上。

11)删除一个文件(delete):手动输入已经创建的文件的名称,即可删除此文件。

12)写文件(write):手动的在文件中写入内容。

13)读文件(read):查看文件中的已经写入的内容。

14)移动文件:用户可以将某个目录下的文件移动到其它的目录中,只为了整理文件,便于查询,使用。

15)改文件的保护码(change):手动修改文件的密码(保护码)。

基于以上的功能,可以使用户选择操作,模拟文件系统的设计与实现;此类功能都是在页面上手动操作完成。

1.2 目的及意义

1.2.1 目的

通过课程设计,加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。基于Linux的模拟文件系统的设计与实现,熟悉基本的网络命令以及他们的使用方法,体会Linux多用户的特点,熟悉网络配置文件的配置方法。本系统是基于linux平台运行在终端上的虚拟二级文件管理系统。模拟真正的文件管理系统,并采用用户登录机制对文件和目录进行创建,增加内容,修改,删除的操作。对于目录而言,可以进行创建删除新添文件的操作;对于文件而言,可以创建,修改,删除。删除目录时,同时删除相应目录下的文件以及文件中的内容。采用用户登录使得用户管理文件更方便, 并形成了二级的文件管理模式。

操作系统(OS)是重要的计算机系统软件,同时也是最活跃的学科之一,其发展极为迅速。它是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。它在计算机系统中占据了特别重要的地位;而其它的诸如汇编程序、编译程序、数据库管理系统等系统软件,以及大量的应用软件,都将依赖于操作系统的支持,取得它的服务。操作系统已成为现代计算机系统、多处理机系统、计算机网络、多媒体系统以及嵌入式系统中都必须配置的、最重要的系统软件。

课程设计是学习的总结,通过课程设计温习我们已经学到的知识并加以运用,还可以了解到其它的知识,来充实自己,充分掌握操作系统的基本原理及各方面知识。

1.2.2 意义

基于其低廉成本与高度可设定性,Linux常常被应用于嵌入式系统,例如机顶盒、移动电话及行动装置等。在移动电话上,Linux已经成为与Symbian OSWindows Mobile系统并列的三大智能手机操作系统之一;而在移动装置上,则成为Windows CEPalm OS外之另一个选择。目前流行的TiVo数位摄影机使用了经过定制化后的Linux。此外,有不少硬件式的网络防火墙及路由器,例如部份LinkSys的产品,其内部都是使用Linux来驱动、并采用了操作系统提供的防火墙及路由功能。 

Linux以它的高效性和灵活性著称。它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能力。Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Window图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统进行操作。  

Linux之所以受到广大计算机爱好者的喜爱,主要原因有两个,一是它属于自由软件,用户不用支付任何费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿对它使用,无约束地继续传播。另一个原因是,它具有Unix的全部功能,任何使用Unix操作系统或想要学习Unix操作系统的人都可以从Linux中获益。

Linux操作系统中实现文件的各种操作,即创建、删除、修改、写入、读取等。通过课程设计让我们进一步了解操作系统,学习操作系统的各方面知识,加深对操作系统的认识,温习课上学过的知识,明确操作系统的作用。可以在不同的角度来观察操作系统的作用。从一般客户的观点,可把操作系统看做是用户与计算机硬件系统之间的接口;从资源管理的观点看,则可把操作系统视为计算机系统资源的管理者。另外,操作系统实现了对计算机资源的抽象,隐藏了对硬件操作的细节,使用户能更方便地使用机器。

1.3 设计成果

基于Linux的模拟文件系统的设计与实现,实现了采用用户登录机制,可以查看文件信息,管理文件及文件夹。在界面中用户可以手动的进行操作,每一步都有操作成功或失败的提示,清晰的展示每一步的操作过程,用户可以方便的实现对文件的操作,例如:创建、修改、删除等。

经过几天的努力完成了基于Linux的模拟文件系统的设计与实现这一课题,按照具体的要求,将每个功能实现并附上温馨提示,主要的功能有:展示了添加用户、用户登录、创建二级目录、修改目录名、删除目录、显示全部目录、创建文件、修改文件名、删除文件、写入文件、读取文件、修改文件保护码等功能。

2总体设计

2.1功能介绍

本系统包括用户管理、目录管理、文件管理共3个模块。在用户管理模块中,包括创建用户,输入用户名;用户登录等功能。在目录管理模块中,包括创建二级文件目录,输入文件的目录名称;显示目录,输入文件目录的名字,显示出对应的目;删除目录;进入目录主要是为了操作目录内部的文件。文件管理模块,包括文件的创建,在进入目录后可以按照提示输入文件的名称,输入密码,创建新的文件并添加文件的保护码;打开一个文件,在目录中按照提示输入文件的名称,便可以打开目录中对应的文件;打开全部文件,进入目录后,按照提示输入相应的操作,即可打开本目录下所有的文件;删除一个文件,进入目录按照提示选择相应的操作,输入文件名称,即可删除此文件;写入文件,在目录中打开一个文件,写入内容;读取文件,在目录中打开文件,查看文件的内容。修改保护码,进入目录输入文件的名称,按照提示修改文件的保护码。形象展示见下图2.1

2.1

2.2模块关联

在系统中各个模块之间有着一定的联系,系统中创建10个用户,每一个用户可以创建多个目录,在目录中最多创建10个文件。用户与目录之间存在一对多的关系,目录与文件之间也存在一对多的关系,用户与文件之间也存在一对多的关系。具体描述见下图:

2.2

2.3

2.4

2.5

3详细设计

3.1用户结构

typedef struct user{

char name[10];

Content *con;

struct user *next;

}User;

本系统可以创建10个用户,用户登陆时只要输入正确便可进入系统,否则提示失败要求重新输入。

do{

printf("输入新用户名:\n");

scanf("%s",name);

exist=0;

char content[255];  

fnode *parent;  

fnode *child; 

fnode *prev;  

fnode *next; 

};

a)函数介绍

void zengjiayonghu();增加新用户

void newfile(Content *con);创建新文件

int display_files(Content *con);展示所有文件

void dufile(Content *con);读取文件

void writefile(Content *con);写入文件

void shanchufile(Content *con);删除文件

void yidongfile(User *u,Content *con);移动文件

int zhankaiallconcent(User *u);展示所有文件

void newcontentname(Content *c,char name[]);更改目录名称

void newconcent(User *u);增加新目录

void shanchuconcent(User *u);删除目录

void xiugaiconcentname(User *u);修改目录名称

void change_filepassword(Content *con);修改文件保护码

int readall_files(Content *con);读取所有文件

3.3主要功能的关键代码

a)创建文件

在用户成功的创建目录后,就可以创建文件了,创建新的文件时首先判断文件名是否已经存在,如果存在则提示重新输入,否则提示“请输入文件保护码!”,在输入文件保护码后,将创建新的文件成功。

关键代码:

do{

exist=0;

printf("请输入新文件名:");

scanf("%s",f_name);

strcat(f_name,tail);

if(is_exist_file(con->file,f_name)) exist=1;

if(exist==1) printf("文件名已存在!\n");

}while(exist==1);

printf("请输入文件保护码:\n");

scanf("%s",password);

q=fopen(f_name,"w");

fclose(q);

while(file->next!=NULL) file=file->next;

new_f=(File *)malloc(sizeof(File));

strcpy(new_f->name,f_name);

strcpy(new_f->password,password);

new_f->next=NULL;

file->next=new_f;

con->filenum++;

printf("添加文件成功!\n",f_name);

}

b)读取文件

读取文件即查看文件中的内容,当输入要读取的文件名后,进行判断文件名称是否存在,若存在则打开文件,查看文件的内容,否侧提示“文件名不存在!”,重新选择读取的文件名,进行下一步的操作。

关键代码:

strcat(name,tail);

while(file!=NULL){

if(strcmp(name,file->name)==0){

find=1;

break;

}

file=file->next;

}

if(find==0){

printf("文件名不存在!\n");

return;

}

c)写入文件

在正常的操作中,用户创建文件主要是保存一些信息;在此系统中,用户创建文件后可以在文件中写入一些内容,发挥文件的作用。首先判断用户输入的文件名是否存在,再判断用户输入的保护码是否正确,正确进入文件后便可以进入文件,进行写操作。

关键代码:

strcat(name,tail);

while(file!=NULL){

if(strcmp(name,file->name)==0){

find=1;

break;

}

file=file->next;

}

if(find==0){

printf("抱歉,文件名不存在\n");

return;

}

do{

printf("请输入保护码:");

scanf("%s",password);

if(strcmp(password,file->password)==0) login=1;

if(login==0) printf("保护码错误!\n请重新输入:");

}while(login==0);

printf("现在文件已经被打开了...\n");

write(name);

printf("\n文件%s写入成功!\n",name);

d)移动文件

移动文件是很常用的操作,用户经常整理自己的文件,将一些文件移动到其它的目录下,此操作首先输入要移动的文件的名称,确认用户输入的文件存在后,再输入移动的目标目录,进行判断后将文件移动到此处,并提示“移动成功!”。

关键代码:

do{

exist=1;

printf("请输入你想要移动的文件名:");

scanf("%s",name);

strcat(name,tail);

if(!is_exist_file(con->file,name)) exist=0;

if(exist==0) printf("该文件名不存在!\n");

}while(exist==0);

printf("移动中...\n");

file=con->file;

f=file->next;

while(f!=NULL){

if(strcmp(f->name,name)==0) break;

file=file->next;

f=f->next;

}

temp_f=f;

file->next=f->next;

printf("请输入您想要移动到的目标目录名: ");

scanf("%s",c_name);

c=u->con;

while(c->next!=NULL){

if(strcmp(c->name,c_name)==0) break;

c=c->next;

}

f=c->file;

while(f->next!=NULL) f=f->next;

f->next=temp_f;

temp_f->next=NULL;

printf("移动成功!\n");

e)删除文件

有时一些文件对用户来说是没有什么意义的,便可以将其删除,在用户登录成功后,进入目录选择删除文件操作,输入要删除的文件名,系统进行判断文件名是否存在,当文件存在时可以执行删除操作,提示“文件删除成功!”。

关键代码:

if(display_files(con)==0) printf("抱歉,你没有文件可删除!\n");

else{

do{

exist=1;

printf("请输入您想要删除的文件名:");

scanf("%s",name);

strcat(name,tail);

if(!is_exist_file(con->file,name)) exist=0;

if(exist==0) printf("抱歉,该文件不存在!\n");

}while(exist==0);

printf("文件删除中...");

file=con->file;

f=file->next;

while(f!=NULL){

if(strcmp(f->name,name)==0) break;

file=f;

f=f->next;

}

f)修改文件的保护码

保护码是文件的安全保护,现在的信息技术不断增强,也有很多人通过获取其它人的文件来盗用他人重要资料或信息,所以很多人采取密保来防止自己的文件内容泄露。有时人们会随意的设置自己的密码,可能在设置后需要修改更加严密的密码。再次我们设计了修改文件保护码,方便用户的更改。用户选择要修改的文件,系统判断文件名是否存在,若存在则提示输入原文件的保护码,再次进行判断保护码是否输入正确,最后输入新的保护码,并进行保存,提示“密码修改成功!”。

关键代码:

void change_filepassword(Content *con){

int login=0;

char name[10];

char tail[]=".txt";

int find=0;

char password[10];

char newpassword[10];

File *file=con->file->next;

printf("请输入要修改保护码的文件名:");

scanf("%s",name);

strcat(name,tail);

while(file!=NULL){

if(strcmp(name,file->name)==0){

find=1;

break;

}

file=file->next;

}

if(find==0){

printf("啊噢。。。文件名不存在\n");

return;

}

do{

printf("请输入原密码:");

scanf("%s",password);

if(strcmp(password,file->password)==0) login=1;

if(login==0) printf("真是悲哀,原密码输入错误!\n请重新输入:");

}while(login==0);

printf("请输入新密码:");

scanf("%s",newpassword);

strcpy(file->password,newpassword);

printf("\n密码修改成功!\n");

}

以上是每个模块的具体的操作介绍并附加关键代码,关键代码对一个系统来说是非常重要的,有时候我们可以通过关键代码以及注释等来理解系统中的各种功能。在此系统中主要展示了添加用户、用户登录、创建二级目录、修改目录名、删除目录、显示全部目录、创建文件、修改文件名、删除文件、写入文件、读取文件、修改文件保护码等功能。

4测试及运行结果

4.1 测试定义

任何项目的开发成功都离不开测试,说明测试起着重要的作用。测试使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的去求或弄清楚预期结果与实际结果之间的差别。它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness)完全度(completeness)和质量(quality)的软件过程;是SQA的重要子域。

(1)测试并不仅仅是为了找出错误,通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;

(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效果和有效性;

(3)没有发现错误的测试也是有价值的,完成的测试是评定软件质量的一种方法。

(4)测试可以分为黑盒测试和白盒测试,测试的方法不同,测试的结果、重点也不相同,选择合适的测试方法对项目的承重有着重要的作用。

4.2 测试目的

如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或者以前出错比较多的位置。如果测试的目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。当然测试的目的不仅仅如此,也不会只针对某个部分进行测试,而忽略其它部分,测试必须要全面。

(1)测试是为了发现错误而执行的过程;

(2)测试是为了证明程序有错,而不是证明程序无错误;

(3)一个好的测试用例是在于它能发现至今未发现的错误;

(4)一个成功的测试是发现了至今未发现的错误的测试。

4.3 测试结果

4.3.1 文件测试

用户的操作对象是文件,首先创建文件,当输入文件名时,测试文件名输入的是否正确,输入的文件名已经存在时,会出现提示信息;在文件中写入内容时,测试输入任何字符都可以,像普通的记事本一样;在读取文件时,可以正常的读取出文件中存在的内容;删除文件时,输入文件名,测试文件名是否输入正确,在文件名不存在时,界面出现提示信息;修改文件保护码,测试输入的初始文件保护码是否输入正确,显示提示信息,当输入正确时,可以对保护码进行修改,并修改成功。测试的结果是正确的。

成功创建文件界面设计:示图4.3.1

4.3.1

写入文件界面设计:示图4.3.2

4.3.2

读取文件界面设计:示图4.3.3

4.3.3

删除文件界面设计:示图4.3.4

4.3.4

修改文件保护码界面设计:示图4.3.5

4.3.5

移动文件界面设计:示图4.3.6

4.3.6

显示所有文件界面设计:示图4.3.7

4.3.7

4.4 测试总结

经过测试,按照要求进行测试,确保功能的完整性,是否有不正确或遗漏了的功能;在接口上输入能否正确接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定厕所是数据,来检查程序是否都能产生正确的输出。

在系统开发的过程中,进行每一步的调试,确保每一个方法、语句都被执行到;开发后,针对具体的要求,进行测试,测试出系统中的功能能正常运行,切每一步不合理的操作,界面上都有提示信息,便于用户的操作、使用。经过测试,在此系统中的所有功能都是按照要求实现的,且都附有操作提示,避免用户操作失误而导致不必要的麻烦。

5心得

通过本次课程设计我对文件系统有了更深的了解。在现代OS中,几乎毫无例外地是通过文件系统来组织和管理在计算机中所存储的大量程序和数据的。此次课程设计实现的文件系统主要是通过其管理功能来呈现给大家的。其实对于我们班的同学来说,实现此次课程设计是有一定难度的,因为我们只学过C语言,而用C语言实现模拟文件系统是非常不灵活的。我们从网上找了很多资料,都是用C++语言编写,那些链表我看着就十分头痛。但是没办法,我只能硬着头皮参照网上的资料编写程序代码。编写代码的过程相当的繁琐,那些链表指针修改的顺序稍微不对功能就可能实现不了甚至是整个程序都会出错。

任何程序都离不了增删改查四个基本操作,我们此次的课程设计也如此。总体来说就是围绕用户、目录、文件的增删改查而展开编写的。经过这次课程设计我更加明白了数据之间联系的重要性。要想将一个完整的程序代码编写完毕,必须要有严格的逻辑思维,而思维的严密取决于数据间的联系是否弄得明白。

这次课程设计编写代码的过程虽然历经波折,但也乐趣无限。每当实现一个新的功能时我都特别的高兴,像发现了新的曙光一样。通过自己的努力实现程序的功能是一件颇具乐趣的事情,在学校的三年里学了各种编程语言,有的学得好,有的学得差,但是一直伴随我身边的只有一件事,那就是编程的快乐。

现在计算机网络遍布全球,未来是信息科技的时代,计算机的运行离不开操作系统。这次课程设计让我认识到了学习操作系统的重要性,任何程序的运行都离不开操作系统。文件系统听起来难理解,其实就存在于我们的生活当中。以前很多人都说学校里学到知识不实用,但我看不然,学校知识与我们的生活息息相关,在学校认真学习知识,在以后的工作和生活中都会用到。

本文来源:https://www.2haoxitong.net/k/doc/0d06ebe3d0f34693daef5ef7ba0d4a7303766c60.html

《操作系统毕业课程设计说明书-基于Linux的模拟文件系统的设计与实现.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式