操作系统设计一个二级文件系统报告_第1页
操作系统设计一个二级文件系统报告_第2页
操作系统设计一个二级文件系统报告_第3页
操作系统设计一个二级文件系统报告_第4页
操作系统设计一个二级文件系统报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、NORTH CHINA UNIVERSITY OF TECHNOLOGY操作系统(2014年秋季学期)序号:8 实 验 报 告系别:计算机科学与技术班级:信安12-1班姓名:李勇学号:07101020112实验名称:进程调度总成绩:评语: 日期:操作系统实验报告实验名称进程调度实验序号1实验日期2014.1.2实验人李勇一、实验目的、要求与环境1目的:编写一个简单的二级文件系统实现程序,加深对文件系统的内部功能和内部实现的理解。2.要求:(1)用C语言(或其它语言,如Java)实现一个简单的二级文件系统设计,加深对文件系统的内部功能和内部实现的理解。要求模拟采用二级目录结构的磁盘文件系统的文件

2、操作, 实现用户的创建、查询、登录、删除,和文件的添加、删除、打开、关闭、读、写等基本命令,用在屏幕上输入命令来模拟用户程序中调用的文件操作。(2)为了清楚地观察文件的管理过程,程序应将每个文件操作的结果显示出来。(3)分析程序运行的结果,谈一下自己的收获。3.环境:1. 硬件设备:PC机一台2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C C+Java 等编程语言环境。二、相关背景知识最基本的文件操作 (1)创建文件 在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项。目录项中应该记录新文件的文件

3、名及其在外存的地址等属性。 (2)删除文件 当已不再需要某文件时,可将它从文件系统中删除。在删除时,系统应该先从目录中找到要删除的文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。 (3)读文件 在读一个文件时,须在相应的系统调用中给出文件名和应该读入的内存目标地址。此时,系统同样要查找目录,找到制定的目录项,从中得到被读文件在外存中的位置。在目录项中,还有一个指针用于对文件的读/写。 (4)写文件 在写一个文件时,须在相应的系统调用中给出该文件名及该文件在内存中的(源)地址。为此,也同样须先查找目录,找到指定文件的目录项,在利用目录中的写指针进行写操作。 (5)截断文件 如果一个文

4、件的内容已经陈旧而需要全部更新文件的内容时,一种方法是将此文件删除,再重新创建一个新文件。但如果文件名及其属性均无改变时,则可采取另一种所谓的截断文件的方法,此即将原有文件的长度设置为0,或说放弃原有的文件内容。 (6)设置文件的读/写位置 前述的文件读/写操作,都只提供了对文件顺序存取的手段,即每次都是从文件的始端读或写。设置文件读/写位置的操作,用于设置文件读/写指针的位置,以便每次读/写文件时,不是从其始端而是从所设置的位置开始操作。也正因如此,才能改顺序存取为随机存取。 三、实验设计说明(写你实验相关的设计,别写这么少,多写点。)本次实验采用C语言模拟二级文件系统,可以在多用户环境下实

5、现用户的创建、查询、登录、删除,和文件的添加、删除、打开、关闭、读、写等基本操作,很好地模拟了操作系统对文件的管理过程。四、实验设计的流程图(写你实验相关的设计流程图,下面的流图是有问题的。)选择操作命令及命令对象文件实施该命令输出错误信息显示已经完成操作的信息开始进行该用户的下个操做直到退出该用户权限结束有操作权限?是否要创建新文件?退出?输入文件名等信息;显示已经完成操作的信息YNYNNY选择用户四、程序代码(换上你自己的程序代码,下面的程序代码是有问题的。)#include "stdlib.h"#include <iostream>#define NULL

6、 0int count=0;struct filechar name10;int code;/保护码int size;char pwrite;/读写指针;struct userchar name10;struct file *list;/目录指针;/struct file one10="a1",0,10,0,"a2",2,10,0,"a3",1,10,0,"a4",2,10,0,"a5",2,10,0,"a6",2,10,0,"a7",1,10,0,&qu

7、ot;0",0,0,0,"0",0,0,0,"0",0,0,0;struct file two10="b1",0,10,0,"b2",2,10,0,"b3",1,10,0,"b4",2,10,0,"b5",2,10,0,"b6",2,10,0,"b7",2,10,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;struct file

8、 three10="c1",0,10,0,"c2",2,10,0,"c3",1,10,0,"c4",2,10,0,"c5",2,10,0,"c6",2,10,0,"c7",1,10,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;struct file four10="d1",0,10,0,"d2",2,10,0,"d3"

9、,1,10,0,"d4",2,10,0,"d5",2,10,0,"d6",2,10,0,"d7",1,10,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;struct file fine10="e1",0,10,0,"e2",2,10,0,"e3",1,10,0,"e4",2,10,0,"e5",2,10,0,"e6",

10、2,10,0,"e7",1,10,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;struct file six10="f1",0,10,0,"f2",2,10,0,"f3",1,10,0,"f4",2,10,0,"f5",2,10,0,"f6",2,10,0,"f7",1,10,0,"0",0,0,0,"0",0,0,0

11、,"0",0,0,0;struct file seven10="g1",0,10,0,"g2",2,10,0,"g3",1,10,0,"g4",2,10,0,"g5",2,10,0,"g6",2,10,0,"g7",1,10,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;struct file eight10="h1",0,10,0,&qu

12、ot;h2",2,10,0,"h3",1,10,0,"h4",2,10,0,"h5",2,10,0,"h6",2,10,0,"h7",1,10,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;struct file nine10="j1",0,10,0,"j2",2,10,0,"j3",1,10,0,"j4",2,10,0,&quo

13、t;j5",2,10,0,"j6",2,10,0,"j7",1,10,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;struct file ten10="k1",0,10,0,"k2",2,10,0,"k3",1,10,0,"k4",2,10,0,"k5",2,10,0,"k6",2,10,0,"k7",1,10,0,"

14、0",0,0,0,"0",0,0,0,"0",0,0,0;struct file UFD10;struct file AFD5="0",0,0,0,"0",0,0,0,"0",0,0,0,"0",0,0,0,"0",0,0,0;/struct user use10="number1",one,"number2",two,"number3",three,"number4"

15、;,four,"number5",fine,"number6",six,"number7",seven,"number8",eight,"number9",nine,"number10",ten;struct user MFD1="0",0;/voidrunning();void delet(); voidwrite();voidopen();voidclose();voidbye();voidread();voidcreate();void input(

16、);/using namespace std;void main()input();running();cout<<"操作己结束"<<endl;/void running()char order;int i;cout<<endl<<"*"<<endl;cout<<"用户的所有文件如下:"<<endl;for(i=0;i<10;i+)cout<<UFD<<"t"cout<<endl

17、<<"*"<<endl;cout<<" 请选择操作命令(输入代号):"<<endl;cout<<"c-create d-deleteo-opens-close r-read w-writeb-byet.exit(重选用户)"<<endl;cout<<endl<<"*"<<endl;cout<<"请输入命令:"<<endl;cin>>order;switc

18、h(order)case 'c' : create();break;case 'd' : delet();break;case 'o' : open();break;case 's' : close();break;case 'r' : read();break;case 'w' : write();break;case 'b' : bye();break;case 't' : input();break;default : cout<<"输入命

19、令出错,请重输"<<endl<<endl;running();/void delet()char name10;int i,flag;docout<<"请输入文件名:"<<endl<<endl;cin>>name;flag=0;for(i=0;i<10;i+)if(strcmp(UFD,name)/如果没有这个文件flag=1;/break;elseflag=0;strcpy(UFD,"0");/清空文件UFDi.code=0;UFDi.pwr

20、ite=0;UFDi.size=0;cout<<"该文件己被删除"<<endl;break;if(flag=1)cout<<"无此文件,请重新输入"<<endl;while(flag=1);cout<<endl;running();/void open()char name10;int i,j,flag;if(count=5)cout<<"运行文件队列己满"<<endl;running();elsedocout<<"请输入文件名:

21、"<<endl;cin>>name;flag=0;for(i=0;i<10;i+)if(strcmp(UFD,name)/如果没有这个文件flag=1;/break;elseflag=0;break;if(flag=1)cout<<"无此文件,请重新输入"<<endl;while(flag=1);for(j=0;j<5;j+)if(strcmp(AFD,name)/如果没有这个文件flag=1;elseflag=0;break;if(flag=1)for(j=0;j<5;j+

22、)if(!strcmp(AFD,"0")AFDj=UFDi;cout<<"文件己打开"<<endl;count+;break;else cout<<"该文件己经在打开队列中"<<endl;cout<<endl;running();/void close()char name10;int j,flag;cout<<"请输入文件名:"<<endl;cin>>name;flag=0;for(j=0;j<5;j

23、+)if(strcmp(AFD,name)/如果没有这个文件flag=1;/break;elseflag=0;strcpy(AFD,"0");/清空文件AFDj.code=0;AFDj.pwrite=0;AFDj.size=0;cout<<"运行队列中的该文件己被关闭"<<endl;break;if(flag=1)cout<<"运行队列中无此打开的文件,请重新操作"<<endl;cout<<endl;running();/void bye()int i

24、,j;for(i=0;i<5;i+)for(j=0;j<10;j+)if(!strcmp(AFD,UFD)UFDi=AFDi;break;cout<<"文件目录己保存"<<endl;cout<<endl;/void read()char name10;int j,flag=0;cout<<"请输入文件名:"<<endl;cin>>name;for(j=0;j<5;j+)if(!strcmp(AFD,name)/如果AFD有这个文件

25、flag=1;break;if(flag=1)if(AFDj.code=0|AFDj.code=2)AFDj.pwrite='R'cout<<"文件的状态是正在读"<<endl;else cout<<"无权限写此文件"<<endl;else cout<<"运行队列中无此文件,请先打开文件"<<endl;cout<<endl;running();/ void write()char name10;int j,flag=0;cout<

26、<"请输入文件名:"<<endl;cin>>name;for(j=0;j<5;j+)if(!strcmp(AFD,name)/如果AFD有这个文件flag=1;break;if(flag=1)if(AFDj.code=1|AFDj.code=2)AFDj.pwrite='W'cout<<"文件的状态是正在写"<<endl;else cout<<"无权限写此文件"<<endl;else cout<<"运行

27、队列中无此文件,请先打开文件"<<endl;cout<<endl;running();/void create()char name10;int i,j=0,flag;for(i=0;i<10;i+)if(!strcmp(UFD,"0")j+;if(j>9)cout<<"文件夹己满,请先删除"<<endl;/cout<<j;running();elsedocout<<"请输入文件名:"<<endl;cin>>

28、;name;flag=0;for(i=0;i<10;i+)if(!strcmp(UFD,name)/如果有重名的文件cout<<"文件名重复,请重新输入"<<endl;flag=1;break;while(flag=1);for(i=0;i<10;i+)if(!strcmp(UFD,"0")/找到第一个空的文件strcpy(UFD,name);docout<<"请输入保护码(选择-2,0-可读,-可写,-可读写):"<<endl;cin&g

29、t;>UFDi.code;if(UFDi.code!=0&&UFDi.code!=1&&UFDi.code!=2)cout<<"输入错误,重新输入保护码"<<endl;while(UFDi.code!=0&&UFDi.code!=1&&UFDi.code!=2);cout<<"请输入文件长度(选择数字):"<<endl;cin>>UFDi.size;cout<<"己建立文件"<<UF

30、D<<endl;break;running();/void input()char name;int i;cout<<endl<<"*"<<endl;cout<<" 请选择以下用户名(输入数字):"<<endl;cout<<"1.one2.two3.three4.four5.fine6.six7.seven8.eigh9.nine0.ten"<<endl;cout<<"*"<<endl

31、<<endl;cout<<"请输入用户名:"cin>>name;switch(name)case '1': for(i=0;i<10;i+)UFDi=onei;MFD0=use1;running();break;case '2': for(i=0;i<10;i+)UFDi=twoi;MFD0=use1;running();break;case '3': for(i=0;i<10;i+)UFDi=threei;MFD0=use2;running();break;case '4': for(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论