文件系统实验报告

  • 格式:doc
  • 大小:14.16 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

篇一:实验四文件系统实验报告

实验四文件系统实验

一 .目的要求

1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。

二 .例题:

1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。

2、程序采用二级文件目录(即设置主目录[mfd])和用户文件目录(ued)。另外,为打开文件设置了运行文件目录(afd)。

3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。

4、算法与框图:

①因系统小,文件目录的检索使用了简单的线性搜索。

②文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。

③程序中使用的主要设计结构如下:

主文件目录和用户文件目录( mfd、ufd)

打开文件目录( afd)(即运行文件目录)文件系统算法的流程图如下:

三 . 实验题:

1、增加 2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <conio.h>

#define maxsize 100

#define addsize 50

#define pt elem+l-> length

#define n 4

typedef struct term{/*班级和学期的结构体*/

char class1[10];

char term1[10];

}term;

typedef struct student{/*学生成绩信息的结构体*/

term st;/*班级和学期结构体放于此结构体中*/

char num[10];

char name[12];

float course[4];

float total;

float average;

int bit;

}lnode,*stu;

typedef struct{

lnode *elem;/*指向上个结构体的指针*/

int size;/*最大能放lnode结构体成员的个数*/

int length;/*当前长度*/

}sqack,*sq;

sqack *l;

void init(void)/*动态分配存储空间*/

{

l-> elem=(stu)malloc(maxsize*sizeof(lnode));

l-> length =0;

l-> size=maxsize;

}

void input(void)/*输入学生的信息*/

{

lnode *newbase,*p;

char cla[10],ter[10],ch;

int n,i;

if(l-> length> =l-> size){

newbase=(stu)realloc(l-> elem,(l-> size +addsize)*sizeof(lnode));/*追加存储空间*/

l-> elem =newbase;

l-> size +=addsize;

}

p=l-> elem;

do

{

printf( 输入班级和学期(学期用这种格式,如2005年上学期 2005 1,2005年下学期 2005 2;先输入班级,回车后再输入学期)\n );

gets(cla);

gets(ter);

printf( 要输入多少个名单? );

scanf( %d ,&n);

printf( 输入学生的成绩\n学号\t姓名\t科目1\t科目2\t科目3\t科目4\n );

for(i=0;i <n;i++)

{

scanf( %s%s%d%d%d%d ,p-> num ,p-> name,p-> course[0],p-> course[1],p-> course[2],p-> course[3]);

strcpy(p-> st.class1,cla);

strcpy(p-> st.term1,ter);

++l-> length ;

}

printf( 要继续吗?(y/n) );ch=getchar();}while(ch== y ||ch== y );

void change()/*修改学生的信息*/

{

lnode *p;

lnode e;

int flag=1,i;

char s1[10],num1[10];

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);

for(i=0;i <n;i++)

printf( %d ,p-> course[i]);

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.course[i]);

*p=e;

}

void same(char *t1,char *t2,lnode *t,int *k) /*把学期和班级相同的学生信息放在结构体数组tt中*/ {

int i=0;

lnode *p,*q;

q=t;

p=l-> elem ;

while(p <=l-> elem+l-> length )

{

if(strcmp(p-> st.term1,t1)==0&&strcmp(p-> st.class1 ,t2)==0)

{

*q=*p;q++;

i++;

}

p++;