文件系统实验报告
- 格式:doc
- 大小:14.16 KB
- 文档页数:11
篇一:实验四文件系统实验报告
实验四文件系统实验
一 .目的要求
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++;