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

上传人:b****8 文档编号:28395124 上传时间:2023-07-13 格式:DOCX 页数:54 大小:387.04KB
下载 相关 举报
操作系统课程设计文件管理二级文件系统.docx_第1页
第1页 / 共54页
操作系统课程设计文件管理二级文件系统.docx_第2页
第2页 / 共54页
操作系统课程设计文件管理二级文件系统.docx_第3页
第3页 / 共54页
操作系统课程设计文件管理二级文件系统.docx_第4页
第4页 / 共54页
操作系统课程设计文件管理二级文件系统.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

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

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

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

操作系统课程设计文件管理二级文件系统

本文档分别包含linux和windows两套程序

一、课程设计的目的

二、课程设计的内容及要求

内容

要求

三、实现原理

四、关键算法实现流程图

流程图

关键算法

五、软件运行环境及限制

六.结果输出及分析

七.心得体会

八.参考文献

一.课程设计的目的

本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。

 

二.课程设计的内容及要求

内容:

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

要求做到以下几点:

1、可以实现下列几条命令(至少4条)。

Login用户登录

Dir列文件目录

Create创建文件

Delete删除文件

Open打开文件

Close关闭文件

Read读文件

Write写文件

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

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

从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:

1、鼓励并优先个人独立选题设计,可从下面设计题目中选择,也可以自拟相关题目;如要合作,每组最多两名同学,且设计文档不能相同;

2、可以在我们实验课最后布置的实验设计基础上进行完善和改进,但不能相同。

3、题目选定后报给班长,班长要注意班级内题目的平衡,根据所选题目进行协调,不要都选一样的题。

4、设计完成后报请老师答辩,答辩时不能对自己提供的设计进行讲解的同学,视为抄袭;

5、要求写出一份详细的设计报告(A4纸)。

6、每位同学在周五将自己的设计报告和电子文档(包括报告和源程序)交给学习委员,并由学习委员统一刻盘后上交。

 

三.实现原理

首先,实现Login用户登录,(用户名:

admin密码:

admin)必须登录成功才能进入文件系统进行查看,进入后,通过树状展示文件目录(默认文件目录是C:

\ProgramFiles),右侧显示文件夹图标或者文件图标,选中节点鼠标右击弹出菜单,有新建目录,新建文件,删除文件,打开文件,属性菜单项,并分别实现其功能。

 

四.关键算法实现流程图

流程图:

 

关键算法:

 

1.新建目录功能的实现

 

privateclassMenuAction2implementsActionListener{

publicvoidactionPerformed(ActionEventarg0){

try{

StringName=JOptionPane.showInputDialog("创建目录名称:

");

if(!

Name.equals("")){

//得到树状视图的被选择节点路径

TreePathpath=tree.getSelectionPath();

//得到树状视图的被选择节点

MutableTreeNodenode=(MutableTreeNode)path

.getLastPathComponent();

//得到树状视图的模型类变量

DefaultTreeModelmodel=(DefaultTreeModel)tree.getModel();

//新建子节点,标题为新目录名称

MutableTreeNodenewNode=newDefaultMutableTreeNode(Name);

//先展开树状视图,触发展开树状视图事件,给当前节点追加下级节点

tree.fireTreeExpanded(path);

//如果当前节点允许存在下级节点,则在树状视图的模型类变量中插入新子节点,位置是第一个,否则显示消息并退出该函数

if(node.getAllowsChildren())

model.insertNodeInto(newNode,node,0);

else{

JOptionPane.showMessageDialog(null,"不能给文件追加下级目录!

");

return;

}

//得到被选择节点对应文件的完整路径信息

StringfullPath="";

for(Objectobj:

path.getPath()){

Stringstr=obj.toString();

//处理盘符根目录问题

if(str.endsWith("\\"))

str=str.substring(0,str.length()-1);

if(fullPath.equals(""))

fullPath+=str;

else

fullPath+="\\"+str;

}

//System.out.println("fullpath="+fullPath);

//生成被选择节点对应的文件类变量

FileparentDir=newFile(fullPath);

//如果是目录,则新建相应的子目录

if(parentDir.isDirectory()){

FilecurrentFile=newFile(fullPath+"\\"+Name);

currentFile.mkdir();

}

}

else{

JOptionPane.showMessageDialog(null,"文件名不能为空!

");

}

}catch(HeadlessExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

2.新建文件功能的实现

privateclassMenuAction5implementsActionListener{

publicvoidactionPerformed(ActionEvente){

TreePathtp=tree.getSelectionPath();

//得到被选择节点对应文件的完整路径信息

StringfullPath="";

for(Objectobj:

tp.getPath()){

Stringstr=obj.toString();

//处理盘符根目录问题

if(str.endsWith("\\"))

str=str.substring(0,str.length()-1);

if(fullPath.equals(""))

fullPath+=str;

else

fullPath+="\\"+str;

}

StringFileName=JOptionPane.showInputDialog("创建文件名称:

");

if(!

FileName.equals(null)){

Filef=newFile(fullPath+"\\"+FileName);

try{

f.createNewFile();

}catch(IOExceptione1){

//TODOAuto-generatedcatchblock

e1.printStackTrace();

}

}else{

JOptionPane.showMessageDialog(null,"文件名不能为空!

");

}

}

}

3.删除功能的实现

//内部类,响应快捷菜单的单击操作

privateclassMenuActionimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

//得到树状视图的被选择节点路径

TreePathtp=tree.getSelectionPath();

//得到树状视图的被选择节点

DefaultMutableTreeNodenode=(DefaultMutableTreeNode)tp

.getLastPathComponent();

//从树状视图删除当前节点

DefaultTreeModeldtm=(DefaultTreeModel)tree.getModel();

dtm.removeNodeFromParent(node);

//得到被选择节点对应文件的完整路径信息

StringfullPath="";

for(Objectobj:

tp.getPath()){

Stringstr=obj.toString();

//处理盘符根目录问题

if(str.endsWith("\\"))

str=str.substring(0,str.length()-1);

if(fullPath.equals(""))

fullPath+=str;

else

fullPath+="\\"+str;

}

//如果是文件,直接删除,如果是目录则调用deleteDir函数删除目录

FilecurrentFile=newFile(fullPath);

if(currentFile.isFile())

currentFile.delete();

else

deleteDir(currentFile);

}

};

//通过递归调用,可以删除目录的函数

publicstaticbooleandeleteDir(Filedir){

//判断是否为目录,如果是,则递归调用自己,如果不是,直接删除文件

if(dir.isDirectory()){

String[]subDir=dir.list();

for(Strings:

subDir){

deleteDir(newFile(dir,s));

}

}

returndir.delete();

}

4.打开文件的功能实现

即是Open_File这个类。

5.属性的功能实现

取得路径名:

TreePathtp=tree.getSelectionPath();

//得到被选择节点对应文件的完整路径信息

StringfullPath="";

for(Objectobj:

tp.getPath()){

Stringstr=obj.toString();

//处理盘符根目录问题

if(str.endsWith("\\"))

str=str.substring(0,str.length()-1);

if(fullPath.equals(""))

fullPath+=str;

else

fullPath+="\\"+str;

}

然后传入newProper(fullPath);

属性详细实现即是Proper类。

 

五.软件运行环境及限制

运行环境:

JDK1.6

使用语言:

Java

编程工具:

JBuilder2007

 

错误提示框

 

进入系统后主界面:

 

菜单选项:

 

新建目录“小小”

 

 

新建文件“小小”

 

删除“小小”目录及文件

 

删除成功

 

打开文件

 

 

查看文件属性

 

 

七.心得体会

操作系统课程设计,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识与掌握。

比如对树的展示有了很好的学习,对二级文件系统也有了很好的了解,如何解决实现里面功能的各种问题。

通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习java语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

八.参考文献

[1]朱福喜,尹为民等编著.Java语言与面向对象程序设计.武汉:

武汉大学出版社,2002.12

[2]陆昌辉,Java程序设计实用案例教程.北京:

电子工业出版社,2008.5

[3]丁振凡,黎章等编著.Java语言实用教程..北京:

北京邮电大学出版社,2005.8

[4]何桥,李肃义等编著.Java程序设计简明教程.北京:

中国水利水电出版社,2004.9

文件管理系统模拟

1.实验目的

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

2.实验内容

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

要求做到以下几点:

(1)可以实现下列几条命令(至少4条)

login用户登录

dir列文件目录

create创建文件

delete删除文件

open打开文件

close关闭文件

read读文件

write写文件

(2)列目录时要列出文件名、物理地址、保护码和文件长度;

(3)源文件可以进行读写保护。

3.实验提示

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

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

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

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

入file0,file1,file2…并以编号作为物理地址,在目录中进行登记。

4.源代码

#include

#include

#include

#defineMEM_D_SIZE1024*1024//总磁盘空间为1M

#defineDISKSIZE1024//磁盘块的大小1K

#defineDISK_NUM1024//磁盘块数目1K

#defineFATSIZEDISK_NUM*sizeof(structfatitem)//FAT表大小

#defineROOT_DISK_NOFATSIZE/DISKSIZE+1//根目录起始盘块号

#defineROOT_DISK_SIZEsizeof(structdirect)//根目录大小

#defineDIR_MAXSIZE1024//路径最大长度为1KB

#defineMSD5//最大子目录数5

#defineMOFN5//最大文件深度为5

#defineMAX_WRITE1024*128//最大写入文字长度128KB

structfatitem/*size8*/

{

intitem;/*存放文件下一个磁盘的指针*/

charem_disk;/*磁盘块是否空闲标志位0空闲*/

};

structdirect

{

/*-----文件控制快信息-----*/

structFCB

{

charname[9];/*文件/目录名8位*/

charproperty;/*属性1位目录0位普通文件*/

intsize;/*文件/目录字节数、盘块数)*/

intfirstdisk;/*文件/目录起始盘块号*/

intnext;/*子目录起始盘块号*/

intsign;/*1是根目录0不是根目录*/

}directitem[MSD+2];

};

structopentable

{

structopenttableitem

{

charname[9];/*文件名*/

intfirstdisk;/*起始盘块号*/

intsize;/*文件的大小*/

}openitem[MOFN];

intcur_size;/*当前打文件的数目*/

};

structfatitem*fat;/*FAT表*/

structdirect*root;/*根目录*/

structdirect*cur_dir;/*当前目录*/

structopentableu_opentable;/*文件打开表*/

intfd=-1;/*文件打开表的序号*/

char*bufferdir;/*记录当前路径的名称*/

char*fdisk;/*虚拟磁盘起始地址*/

voidinitfile();

voidformat();

voidenter();

voidhalt();

intcreate(char*name);

intopen(char*name);

intclose(char*name);

intwrite(intfd,char*buf,intlen);

intread(intfd,char*buf);

intdel(char*name);

intmkdir(char*name);

intrmdir(char*name);

voiddir();

intcd(char*name);

voidprint();

voidshow();

voidinitfile()

{

fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));/*申请1M空间*/

format();

}

voidformat()

{

inti;

FILE*fp;

fat=(structfatitem*)(fdisk+DISKSIZE);/*计算FAT表地址,引导区向后偏移1k)*/

/*-----初始化FAT表------------*/

fat[0].item=-1;/*引导块*/

fat[0].em_disk='1';

for(i=1;i

{

fat[i].item=i+1;

fat[i].em_disk='1';

}

fat[ROOT_DISK_NO].item=-1;/*存放根目录的磁盘块号*/

fat[ROOT_DISK_NO].em_disk='1';

for(i=ROOT_DISK_NO+1;i

{

fat[i].item=-1;

fat[i].em_disk='0';

}

/*-----------------------------------------------*/

root=(structdirect*)(fdisk+DISKSIZE+FATSIZE);/*根目录的地址*/

/*初始化目录*/

/*---------指向当前目录的目录项---------*/

root->directitem[0].sign=1;

root->directitem[0].firstdisk=ROOT_DISK_NO;

strcpy(root->directitem[0].name,".");

root->directitem[0].next=root->directitem[0].firstdisk;

root->directitem[0].property='1';

root->directitem[0].size=ROOT_DISK_SIZE;

/*-------指向上一级目录的目录项---------*/

root->directitem[1].sign=1;

root->directitem[1].firstdisk=ROOT_DISK_NO;

strcpy(root->directitem[1].name,"..");

root->directitem[1].next=root->directitem[0].firstdisk;

root->directitem[1].property='1';

root->directitem[1].size=ROOT_DISK_SIZE;

if((fp=fopen("disk.dat","wb"))==NULL)

{

printf("Error:

\nCannotopenfile\n");

return;

}

for(i=2;i

{

root->directitem[i].sign=0;

root->directitem[i].firstdisk=-1;

strcpy(root->directitem[i].name,"");

root->directitem[i].next=-1;

root->directitem[i].property='0';

root->directitem[i].size=0;

}

if((fp=fopen("disk.dat","wb"))==NULL)

{

printf("Error:

\nCannotopenfile\n");

return;

}

if(fwrite(fdisk,MEM_D_SIZE,1,fp)!

=1)/*把虚拟磁盘空间保存到磁盘文件中*/

{

printf("Error:

\nFilewriteerror!

\n");

}

fclose(fp);

}

voidenter()

{

FILE*fp;

inti;

fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));/*申

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

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1