文件系统试验报告_第1页
文件系统试验报告_第2页
文件系统试验报告_第3页
文件系统试验报告_第4页
文件系统试验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、篇一:实验四文件系统实验报告实验四文件系统实验一.目的要求1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。2、要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。二.例题:1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。2、程序采用二级文件目录(即设置主目录mfd)和用户文件目录(ued)。另外,为打开文件设置了运行文件目录(a

2、fd)。3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。4、算法与框图:因系统小,文件目录的检索使用了简单的线性搜索。文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。程序中使用的主要设计结构如下:主文件目录和用户文件目录(mfd、ufd)打开文件目录(afd)(即运行文件目录)文件系统算法的流程图如下:三.实验题:1、增加23个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。#include<stdio.h>#include<malloc.h

3、>#include<string.h>#include<conio.h>#definemaxsize100#defineaddsize50#defineptelem+l->length#definen4typedefstructterm/*班级和学期的结构体*/charclass110;charterm110;term;typedefstructstudent/*学生成绩信息的结构体*/termst;/*班级和学期结构体放于此结构体中*/charnum10;charname12;floatcourse4;floattotal;floataverage;int

4、bit;lnode,*stu;typedefstructInode*elem;/*指向上个结构体的指针*/intsize;/*最大能放Inode结构体成员的个数*/intlength;/*当前长度*/sqack,*sq;sqack*l;voidinit(void)/*动态分配存储空间*/l->elem=(stu)malloc(maxsize*sizeof(lnode);l->length=0;l->size=maxsize;voidinput(void)/*输入学生的信息*/lnode*newbase,*p;charcla10,ter10,ch;intn,i;if(l->

5、;length>=l->size)newbase=(stu)realloc(l->elem,(l->空间*/l->elem=newbase;l->size+=addsize;p=l->elem;doprintf(输入班级和学期(学期用这种格式,2;先输入班级,回车后再输入学期)n);gets(cla);gets(ter);printf(要输入多少个名单?);scanf(%d,&n);printf(输入学生的成绩n学号t姓名tfor(i=0;i<n;i+)scanf(%s%s%d%d%d%d,p->size+addsize)*size

6、of(lnode);/*追加存储如2005年上学期20051,2005年下学期2005科目1t科目2t科目3t科目4n);num,p->name,p->course0,p->course1,p->course2,p->course3);strcpy(p->st.class1,cla);strcpy(p->st.term1,ter);+l->length;printf(要继续吗?(y/n);ch=getchar();while(ch=y|ch=y);)voidchange()/*修改学生的信息*/(Inode*p;Inodee;intflag=1,

7、i;chars110,num110;printf(输入学期和学号(输入学期以后按回车再输入学号):n);gets(s1);gets(num1);p=l->elem;while(p<=(l->elem+l->length)&&flag=1)/*查找要修改的学生的信息*/(if(strcmp(p->num,num1)=0&&strcmp(p->st.term1,s1)=0)flag=0;/*找到了*/p+;)p-;if(flag=1)printf(找不到此学号!n);printf(%s%s,p->num,p->name

8、);for(i=0;i<n;i+)printf(%d,p->coursei);printf(n);printf(输入修改信息n);scanf(%s%s%s%s,e.st.class1,e.st.term1,&e.num,);for(i=0;i<n;i+)scanf(%d,&e.coursei);*p=e;)voidsame(char*t1,char*t2,lnode*t,int*k)/*把学期和班级相同的学生信息放在结构体数组tt中*/inti=0;lnode*p,*q;q=t;p=l->elem;while(p<=l->elem

9、+l->length)if(strcmp(p->st.term1,t1)=0&&strcmp(p->st.class1,t2)=0)*q=*p;q+;i+;)p+;)*k=i;)voidsort(lnode*p,int*k)/*按学生成绩从高到低排序函数*/(inti;Inode*q,temp;for(q=p;q<p+*k;q+)(q->total=0;for(i=0;i<n;i+)q->total=q->total+q->coursei;q->average=q->total/n;)for(i=0;i<*

10、k-1;i+)for(q=p;q<p+*k-1-i;q+)if(q->total<(q+1)->total)temp=*q;*q=*(q+1);*(q+1)=temp;)voidprint(lnode*q,int*k)/*输出学生的成绩*/lnode*p;p=q;for(p=q;p<q+*k;p+)printf(%s%s,p->num,p->name);for(inti=0;i<n;i+)printf(%d,p->coursei);printf(%d%f,p->total,p->average);printf(n);)voids

11、tat()/*统计学生的成绩*/lnodett50;charter10,clas10;inti,k;printf(请输入学期和班级(输入学期后按回车再输入班级):n);for(i=0;teri!=n;i+)teri=getchar();for(i=0;clasi!=n;i+)clasi=getchar();tt中*/same(ter,clas,tt,&k);/*把学期和班级相同的学生信息放在结构体数组按学生成绩从高到低排序函数输出学生的成绩*/按学号查*/*/sort(tt,&k);/*print(tt,&k);/*)voidsearch1()/*(lnode*p;ch

12、arter110;inti,flag=1;p=l->elem;printf(输入学号:);gets(ter1);for(p=l->elem;p<l->pt;p+)(if(strcmp(p->num,ter1)=0)(flag=0;printf(%s%s,p->st.term1,p->st.class1);printf(%s%s,p->num,p->name);for(i=0;i<n;i+)printf(%d,p->coursei);printf(%d%3.1f,p->total,p->average);printf(

13、n);)if(flag)printf(没有找到!);)voidsearch2()/*按姓名查*/(lnode*p;charter110;inti,flag=1;p=l->elem;printf(输入姓名:);gets(ter1);for(p=l->elem;p<l->pt;p+)(if(strcmp(p->name,ter1)=0)(flag=0;printf(%s%s,p->st.term1,p->st.class1);printf(%s%s,p->num,p->name);for(i=0;i<n;i+)printf(%d,p-&g

14、t;coursei);printf(%d%f,p->total,p->average);printf(n);)if(flag)printf(没有找到!);)voidsearch()/*查找学生的成绩*/(charch;do(printf(1按学号查询n2按姓名查询n);ch=getchar();switch(ch)(case 1 :search1();break;case 2 :search2();break;default:printf(错误!n);)printf(要继续查找吗?(y/n);ch=getchar();while(ch=y|ch=y);)voidfail()/*查找

15、不及格及学生名单*/(inti;Inode*p;for(p=l->elem;p<l->pt;p+)(for(i=0;i<n;i+)if(p->coursei<60)(printf(%s%s,p->st.class1,p->st.terml);for(i=0;i<n;i+)printf(%d,p->coursei);printf(%d%f,p->total,p->average);printf(n);voidoutput()/*按班级输出学生的成绩单*/(lnodett50;intk;charclas10,ter110;pr

16、intf(输入要查询的班级和学期(输入班级后按回车输入学期):n);gets(clas);gets(terl);same(ter1,clas,tt,&k);/*把学期和班级相同的学生信息放在结构体数组tt中*/print(tt,&k);/*输出学生的成绩*/篇二:文件系统实验报告试验四文件系统一、实验目的1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。2、要求设at一个n个用户的文件系统,每次用户可以保存m个文件。用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、del

17、ete、open、close、read、write等命令。二、实验题目:采用二级目录结构实现磁盘文件操作。要求:1 .普通文件的目录项包括文件名,文件类型,文件长度,指向文件内容的指针内容。2 .目录文件的目录项包括目录名,指向下一级目录块的指针内容。假定每个目录文件最多只能占用一个块;3 .程序功能方面的要求:需要实现一个命令行操作界面,包含如下命令:4 .程序实现方面的要求:(1)、对于重名(创建时),文件不存在(删除时),目录不存在(改变目录时)等错误操作情况,程序应该做出相应处理并给出错误信息,但是程序不得因此而退出。(2)、界面友好,程序强壮。(3)、设置界面的提示符,提示的命令以及

18、调试的方法应和前面的要求一致。不要自己设计命令或者附加不要求的功能。三.实验源程序文件名:filesystem_s.cpp执行文件名:project1.exe四.实验分析1)总论:该系统是一个多用户、多任务的实时操作系统。对用户和用户的文件数目并没有上限。也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制。该系统的操作命令如下:、bye-用户注销命令。当使用该命令时,用户退出系统。命令格式:runbye/系统注销该用户并回到登陆界面。、close-删除用户注册信息命令。执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除。命令格式:runclose

19、/.完成后返回登陆界面。、create-在当前目录下创建一个文件,且该文件不能跟系统中的文件重名。该文件的管理信息登录到用户文件信息管理模块中。命令格式:runcreate>file1/。其中file1为要创建的文件名称。执行完该命令后回到执行命令行。、delete-删除当前用户目录下的一个文件。命令格式:rundelete>file1/。返回命令行。、list-显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。命令格式:runlist/。、chmod-改变某个文件的执行权限,但前提是该文件是该用户目录下的文件。命令格式:runchmod>file1/。、

20、open-在window界面下打开某个文件。命令格:runopen>file1/。执行该命令后,文件file1将用在windows界面下的文件形式打开。用户可以在这个方式中对文件进行修改,并将修改后的内容保存。、read-读文件信息。将文件信息读入并显示在终端。命令格式:runread>file1/。、write-向某个文件写入新的信息。用户可以选择用覆盖原来内容的方式和在文件的末尾插入新信息的方式写入信息。2)_系统采用二级文件目录。设置主目录(mfd)和用户文件目录(ufd),分别以文件的方式保存在磁盘中。在主目录中又注册用户的用户名和另一标志该用户目录下是否有文件的指针标记。

21、用户文件目录用用户名作为文件名保存在磁盘,以便检索时方便对应。在用户文件目录中保存着该目录下所有的文件的文件名称、保护码、文件长度。3)该系统大量使用高级语言中的文件操作函数,所以能实际看到文件的创建写入、读出、删除等效果。4)实验流程图5)源程序:#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#includeconio.h#include<dos.h>#definenull0#definekeynum10#definegetspace

22、(type)(type*)malloc(sizeof(type)charcmd64;存放用户输入命令charbuffer36;/charuser32;/存放当前登陆的用户名typedefcharalfa12;alfakwordkeynum;structufd/用户文件管理模块charfilename32;/文件名intsafecode;/文件保护码longlength;/文件长度*curfile=null;structmfd/用户登陆信息管理模块charusername32;/用户名boolfilepoint;/用户目录下的文件指针,false表示目录为空*curuser=null,*else

23、user=null;typedefufdufd;typedefmfdmfd;voidmain();voidkeyword。/初始化命令关键字strcpy(kword1,bye);strcpy(kword2,chmod);strcpy(kword3,close);strcpy(kword4,create);strcpy(kword5,delete);strcpy(kword6,list);strcpy(kword7,open);strcpy(kword8,read);strcpy(kword9,write);intlogindisplay()登陆选项操作函数(intselete_1=0;do(c

24、out<<*请选择操作*n1、用户登陆2、用户注册0、退出<<endl;cin>>selete_1;while(selete_1<0|selete_1>2);system(cls);returnselete_1;boollogin(intselete)/用户登陆,注册函数(file*fp,*fp1,*fp2;charname12;switch(selete)case1:/用户登陆if(fp=fopen(login.exe,rb)=null)/打开用户注册目录管理文件cout<<n错误:不能打开登陆文件。<<endl;get

25、ch();system(cls);returnfalse;curuser=getspace(mfd);cout<<n*登陆*n用户名:;cin>>name;/输入用户登陆名while(!feof(fp)/检查该用户是否合法fread(curuser,sizeof(mfd),1,fp);if(strcmp(curuser->username,name)=0)break;if(feof(fp)/如果没有找到跟当前登陆用户名相同的管理信息,提示出错cout<<n错误:该用户不存在。<<endl;fclose(fp);returnfalse;els

26、efclose(fp);returntrue;break;case2:新用户注册if(fp=fopen(login.exe,ab)=null)/如果登陆信息管理文件不存在fp=fopen(login.exe,wb+);/创建该信息管理文件charname12;curuser=getspace(mfd);while(1)cout<<n*新用户注册*<<endl;cout<<用户名:;cin>>name;while(!feof(fp1)/查看该用fread(curuser,sizeof(mfd),1,fp1);/输入用户注册名fp1=fopen(lo

27、gin.exe,rb);户名是否被别的用户占用if(strcmp(curuser->username,name)=0)/该用户已经存在,请重新入!<<endl;篇三:该名称已经被使用cout<<n文件系统实验报告实验二文件系统实验报告一.实验简介本实验要求在假设的i/o系统之上开发一个简单的文件系统,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。用户通过create,open,read等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0至l-1。i/o系统利用内存中的数组模拟磁盘。我设计的文件系统拥有三个用户。二.具体说明

28、1.文件系统的组织:磁盘的前k个块是保留区,其中包含如下信息:位图和文件描述符。位图用来描述磁盘块的分配情况。位图中的每一位对应一个逻辑块。创建或者删除文件,以及文件的长度发生变化时,文件系统都需要进行位图操作。前k个块的剩余部分包含一组文件描述符。每个文件描述符包含如下信息:?文件长度,单位字节?文件分配到的磁盘块号数组。该数组的长度是一个系统参数。在实验中我们可以把它设置为一个比较小的数,例如3。2 .目录:我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。目录对应0号文件描述符。初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。每创建一个文件,目录文件的长度便增加一分。目录文件的内容由一系列的目

温馨提示

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

评论

0/150

提交评论