欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:70338832       资源大小:650.78KB        全文页数:35页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    本文档分别包含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:Program Files),右侧显示文件夹图标或者文件图标,选中节点鼠标右击弹出菜单,有新建目录,新建文件,删除文件,打开文件,属性菜单项,并分别实现其功能。四关键算法实现流程图流程图:关键算法:1 新建目录功能的实现private class MenuAction2 implements ActionListener public void actionPerformed(ActionEvent arg0) try String Name=JOptionPane.showInputDialog("创建目录名称:");if (!Name.equals("") / 得到树状视图的被选择节点路径TreePath path = tree.getSelectionPath();/ 得到树状视图的被选择节点MutableTreeNode node = (MutableTreeNode) path.getLastPathComponent();/ 得到树状视图的模型类变量DefaultTreeModel model = (DefaultTreeModel) tree.getModel();/ 新建子节点,标题为新目录名称MutableTreeNode newNode = new DefaultMutableTreeNode(Name);/ 先展开树状视图,触发展开树状视图事件,给当前节点追加下级节点tree.fireTreeExpanded(path);/ 如果当前节点允许存在下级节点,则在树状视图的模型类变量中插入新子节点,位置是第一个,否则显示消息并退出该函数if (node.getAllowsChildren()model.insertNodeInto(newNode, node, 0);else JOptionPane.showMessageDialog(null, "不能给文件追加下级目录!");return;/ 得到被选择节点对应文件的完整路径信息String fullPath = ""for (Object obj : path.getPath() String str = obj.toString();/ 处理盘符根目录问题if (str.endsWith("")str = str.substring(0, str.length() - 1);if (fullPath.equals("")fullPath += str;elsefullPath += "" + str;/System.out.println("fullpath="+fullPath);/ 生成被选择节点对应的文件类变量File parentDir = new File(fullPath);/ 如果是目录,则新建相应的子目录if (parentDir.isDirectory() File currentFile = new File(fullPath + "" + Name);currentFile.mkdir();elseJOptionPane.showMessageDialog(null, "文件名不能为空!"); catch (HeadlessException e) / TODO Auto-generated catch blocke.printStackTrace();2.新建文件功能的实现private class MenuAction5 implements ActionListener public void actionPerformed(ActionEvent e) TreePath tp = tree.getSelectionPath();/ 得到被选择节点对应文件的完整路径信息String fullPath = ""for (Object obj : tp.getPath() String str = obj.toString();/ 处理盘符根目录问题if (str.endsWith("")str = str.substring(0, str.length() - 1);if (fullPath.equals("")fullPath += str;elsefullPath += "" + str;String FileName = JOptionPane.showInputDialog("创建文件名称:");if (!FileName.equals(null) File f = new File(fullPath + "" + FileName);try f.createNewFile(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();elseJOptionPane.showMessageDialog(null, "文件名不能为空!");3.删除功能的实现/ 内部类,响应快捷菜单的单击操作private class MenuAction implements ActionListener public void actionPerformed(ActionEvent e) / 得到树状视图的被选择节点路径TreePath tp = tree.getSelectionPath();/ 得到树状视图的被选择节点DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp.getLastPathComponent();/ 从树状视图删除当前节点DefaultTreeModel dtm = (DefaultTreeModel) tree.getModel();dtm.removeNodeFromParent(node);/ 得到被选择节点对应文件的完整路径信息String fullPath = ""for (Object obj : tp.getPath() String str = obj.toString();/ 处理盘符根目录问题if (str.endsWith("")str = str.substring(0, str.length() - 1);if (fullPath.equals("")fullPath += str;elsefullPath += "" + str;/ 如果是文件,直接删除,如果是目录则调用deleteDir函数删除目录File currentFile = new File(fullPath);if (currentFile.isFile()currentFile.delete();elsedeleteDir(currentFile);/ 通过递归调用,可以删除目录的函数public static boolean deleteDir(File dir) / 判断是否为目录,如果是,则递归调用自己,如果不是,直接删除文件if (dir.isDirectory() String subDir = dir.list();for (String s : subDir) deleteDir(new File(dir, s);return dir.delete();4.打开文件的功能实现即是Open_File这个类。5.属性的功能实现取得路径名:TreePath tp = tree.getSelectionPath();/ 得到被选择节点对应文件的完整路径信息String fullPath = ""for (Object obj : tp.getPath() String str = obj.toString();/ 处理盘符根目录问题if (str.endsWith("")str = str.substring(0, str.length() - 1);if (fullPath.equals("")fullPath += str;elsefullPath += "" + str;然后传入new Proper(fullPath);属性详细实现即是Proper类。五软件运行环境及限制运行环境:JDK 1.6使用语言:Java编程工具:JBuilder2007错误提示框进入系统后主界面:菜单选项:新建目录“小小”新建文件“小小”删除“小小”目录及文件删除成功打开文件查看文件属性七心得体会操作系统课程设计,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识与掌握。比如对树的展示有了很好的学习,对二级文件系统也有了很好的了解,如何解决实现里面功能的各种问题。 通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习java语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。八参考文献1朱福喜,尹为民等编著.Java语言与面向对象程序设计.武汉:武汉大学出版社,2002.12 2陆昌辉,Java程序设计实用案例教程.北京:电子工业出版社,2008.53丁振凡,黎章等编著.Java语言实用教程.北京:北京邮电大学出版社,2005.84何桥,李肃义等编著.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<stdio.h> #include<string.h> #include<stdlib.h> #define MEM_D_SIZE 1024*1024 /总磁盘空间为1M#define DISKSIZE 1024/磁盘块的大小1K#define DISK_NUM 1024/磁盘块数目1K#define FATSIZE DISK_NUM*sizeof(struct fatitem)/FAT表大小#define ROOT_DISK_NO FATSIZE/DISKSIZE+1/根目录起始盘块号#define ROOT_DISK_SIZE sizeof(struct direct)/根目录大小#define DIR_MAXSIZE 1024/路径最大长度为1KB#define MSD 5/最大子目录数5#define MOFN 5/最大文件深度为5#define MAX_WRITE 1024*128/最大写入文字长度128KB struct fatitem /* size 8*/ int item; /*存放文件下一个磁盘的指针*/ char em_disk; /*磁盘块是否空闲标志位 0 空闲*/ ; struct direct /*-文件控制快信息-*/ struct FCB char name9; /*文件/目录名 8位*/ char property; /*属性 1位目录 0位普通文件*/ int size; /*文件/目录字节数、盘块数)*/ int firstdisk; /*文件/目录 起始盘块号*/ int next; /*子目录起始盘块号*/ int sign; /*1是根目录 0不是根目录*/ directitemMSD+2; ; struct opentable struct openttableitem char name9; /*文件名*/ int firstdisk; /*起始盘块号*/ int size; /*文件的大小*/ openitemMOFN; int cur_size; /*当前打文件的数目*/ ; struct fatitem *fat; /*FAT表*/ struct direct *root; /*根目录*/ struct direct *cur_dir; /*当前目录*/ struct opentable u_opentable; /*文件打开表*/ int fd=-1; /*文件打开表的序号*/ char *bufferdir; /*记录当前路径的名称*/ char *fdisk; /*虚拟磁盘起始地址*/ void initfile(); void format(); void enter(); void halt(); int create(char *name); int open(char *name); int close(char *name); int write(int fd,char *buf,int len); int read(int fd,char *buf); int del(char *name); int mkdir(char *name); int rmdir(char *name); void dir(); int cd(char *name); void print(); void show(); void initfile() fdisk = (char *)malloc(MEM_D_SIZE*sizeof(char); /*申请 1M空间*/ format(); void format() int i; FILE *fp; fat = (struct fatitem *)(fdisk+DISKSIZE); /*计算FAT表地址,引导区向后偏移 1k)*/ /*-初始化FAT表-*/ fat0.item=-1; /*引导块*/ fat0.em_disk='1' for(i=1;i<ROOT_DISK_NO-1;i+) /*存放 FAT表的磁盘块号*/ fati.item=i+1; fati.em_disk='1' fatROOT_DISK_NO.item=-1; /*存放根目录的磁盘块号*/ fatROOT_DISK_NO.em_disk='1' for(i=ROOT_DISK_NO+1;i<DISK_NUM;i+) fati.item = -1; fati.em_disk = '0' /*-*/ root = (struct direct *)(fdisk+DISKSIZE+FATSIZE); /*根目录的地址*/ /*初始化目录*/ /*-指向当前目录的目录项-*/ root->directitem0.sign = 1; root->directitem0.firstdisk = ROOT_DISK_NO; strcpy(root->directitem0.name,"."); root->directitem0.next = root->directitem0.firstdisk; root->directitem0.property = '1' root->directitem0.size = ROOT_DISK_SIZE; /*-指向上一级目录的目录项-*/ root->directitem1.sign = 1; root->directitem1.firstdisk = ROOT_DISK_NO; strcpy(root->directitem1.name,"."); root->directitem1.next = root->directitem0.firstdisk; root->directitem1.property = '1' root->directitem1.size = ROOT_DISK_SIZE; if(fp = fopen("disk.dat","wb")=NULL) printf("Error:n Cannot open file n"); return; for(i=2;i<MSD+2;i+) /*-子目录初始化为空-*/ root->directitemi.sign = 0; root->directitemi.firstdisk = -1; strcpy(root->directitemi.name,""); root->directitemi.next = -1; root->directitemi.property = '0' root->directitemi.size = 0; if(fp = fopen("disk.dat","wb")=NULL) printf("Error:n Cannot open file n"); return; if(fwrite(fdisk,MEM_D_SIZE,1,fp)!=1) /*把虚拟磁盘空间保存到磁盘文件中*/ printf("Error:n File write error! n"); fclose(fp); void enter() FILE *fp; int i; fdisk = (char *)malloc(MEM_D_SIZE*sizeof(char); /*申请 1M空间*/ if(fp=fopen("disk.dat","rb")=NULL) printf("Error:nCannot open filen"); return; if(!fread(fdisk,MEM_D_SIZE,1,fp) /*把磁盘文件disk.dat 读入虚拟磁盘空间(内存)*/ printf("Error:nCannot read filen"); exit(0); fat = (struct fatitem *)(fdisk+DISKSIZE); /*找到FAT表地址*/ root = (struct direct *)(fdisk+DISKSIZE+FATSIZE);/*找到根目录地址*/ fclose(fp); /*-初始化用户打开表-*/ for(i=0;i<MOFN;i+) strcpy(u_opentable.openitemi.name,""); u_opentable.openitemi.firstdisk = -1; u_opentable.openitemi.size = 0; u_opentable.cur_size = 0; cur_dir = root; /*当前目录为根目录*/ bufferdir = (char *)malloc(DIR_MAXSIZE*sizeof(char); strcpy(bufferdir,"Root:"); void halt() FILE *fp; int i; if(fp=fopen("disk.dat","wb")=NULL) printf("Error:nCannot open filen"); return; if(!fwrite(fdisk,MEM_D_SIZE,1,fp) /*把虚拟磁盘空间(内存)内容读入磁盘文件disk.dat */ printf("Error:nFile write error!n"); fclose(fp); free(fdisk); free(bufferdir); return;int create(char *name) int i,j; if(strlen(name)>8) /*文件名大于 8位*/ return(-1); for(j=2;j<MSD+2;j+) /*检查创建文件是否与已存在的文件重名*/ if(!strcmp(cur_dir->directitemj.name,name) break; if(j<MSD+2) /*文件已经存在*/ return(-4); for(i=2;i<MSD+2;i+) /*找到第一个空闲子目录*/ if(cur_dir->directitemi.firstdisk=-1) break; if(i>=MSD+2) /*无空目录项*/ return(-2); if(u_opentable.cur_size>=MOFN) /*打开文件太多*/ return(-3); for(j=ROOT_DISK_NO+1;j<DISK_NUM;j+) /*找到空闲盘块 j 后退出*/ if(fatj.em_disk='0') break; if(j>=DISK_NUM) return(-5); fatj.em_disk = '1' /*将空闲块置为已经分配*/ /*-填写目录项-*/ strcpy(cur_dir->directitemi.name,name); cur_dir->directitemi.firstdisk = j; cur_dir->directitemi.size = 0; cur_dir->directitemi.next = j; cur_dir->directitemi.property = '0' /*-*/ fd = open(name); return 0; int open(char *name) int i, j; for(i=2;i<MSD+2;i+) /*文件是否存在*/ if(!strcmp(cur_dir->directitemi.name,name) break; if(i>=MSD+2) return(-1); /*-是文件还是目录-*/ if(cur_dir->directitemi.property='1')return(-4); /*-文件是否打开-*/ for(j=0;j<MOFN;j+) if(!strcmp(u_opentable.openitemj.name,name) break; if(j<MOFN) /*文件已经打开*/ return(-2); if(u_opentable.cur_size>=MOFN) /*文件打开太多*/ return(-3); /*-查找一个空闲用户打开表项-*/ for(j=0;j<MOFN;j+) if(u_opentable.openitemj.firstdisk=-1) break; /*-填写表项的相关信息-*/ u_opentable.openitemj.firstdisk = cur_dir->directitemi.firstdisk; strcpy(u_opentable.openitemj.name,name); u_opentable.openitemj.size = cur_dir->directitemi.size; u_opentable.cur_size+; /*-返回用户打开表表项的序号-*/ return(j); int close(char *name) int i; for(i=0;i<MOFN;i+) if(!strcmp(u_opentable.openitemi.name,name) break; if(i>=MOFN) return(-1); /*-清空该文件的用户打开表项的内容-*/ strcpy(u_opentable.openitemi.name,""); u_opentable.openitemi.firstdisk = -1; u_opentable.openitemi.size = 0; u_opentable.cur_size-; return 0; int write(int fd, char *buf, int len) char *first; int item, i, j, k; int ilen1, ilen2, modlen, temp; /*-用 $ 字符作为空格 # 字符作为换行符-*/ char Space = 32; char Endter= 'n' for(i=0;i<len;i+) if(bufi = '$') bufi = Space; else if(bufi = '#') bufi = Endter; /*-读取用户打开表对应表项第一个盘块号-*/ item = u_opentable.openitemfd.firstdisk; /*-找到当前目录所对应表项的序号-*/ for(i=2;i<MSD+2;i+) if(cur_dir->directitemi.firstdisk=item) break; temp = i; /*-存放当前目录项的下标-*/ /*-找到的item 是该文件的最后一块磁盘块-*/ while(fatitem.item!

    注意事项

    本文(操作系统课程设计文件管理二级文件系统.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开