操作系统 文件系统 实验程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一 . 实验目的
用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
二、实验要求
要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。
程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。在执行读写命令时,需改读写指针。因系统小,文件目录的检索使用了简单的线性搜索。
文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。
程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)、打开文件目录(AFD)(即运行文件目录)
文件系统算法的流程图如下:
#include
#include
#define N 10
#define L 10
#define S 6
struct mfd_type
{
char uname[20];
int uaddr;
};
struct ufd_type
{
char fname[20];
char fattr[10];
int recordl;
int addrf;
};
struct uof_type
{
char fname[20];
char fattr[10];
int recordl;
char fstatue;//1:建立0:打开
int readp;
int writep;
};
int fdph[N*L];//存放文件在磁盘上的第一个空间编号
int fdpt[N*L];//存放文件在磁盘上的最末一个空间编号
int disk[400];//存放磁盘空闲块号
int diskt,diskh;//空闲块的尾、首指针最末
struct mfd_type mfd[N];
struct ufd_type ufd[N *L];
struct uof_type uof[N *S];
int temp,mi,ni,uno ,ucounter;
void create(char cfname[20],int crecordl,char cfattr[10])
{
int cltemp1=uno*L,cltemp2=(uno+1)*L,frd;
while ((cltemp1 cltemp1++; if(strcmp(ufd[cltemp1].fname,cfname)!=0) { cltemp1=uno*L; while ((cltemp1 if(strcmp(ufd[cltemp1].fname,"")==0) { frd=cltemp1; cltemp1=uno*S; cltemp2=(uno+1)*S; while ((cltemp1 if(strcmp(uof[cltemp1].fname,"")==0) { if (disk[diskh]!=-1) { strcpy(uof[cltemp1].fname,cfname); strcpy(uof[cltemp1].fattr,cfattr); uof[cltemp1].recordl=crecordl; uof[cltemp1].fstatue=1; uof[cltemp1].readp=disk[diskh]; uof[cltemp1].writep=disk[diskh]; fdph[frd]=disk[diskh]; fdpt[frd]=disk[diskh]; strcpy(ufd[frd].fname,cfname); strcpy(ufd[frd].fattr,cfattr); ufd[frd].recordl=crecordl; ufd[frd].addrf=disk[diskh]; diskh=disk[diskh]; printf("%s\n","文件建立成功!"); } else printf("%s\n","磁盘没有空间,不能建文件!"); } else printf("%s\n","没有空的登记拦1,不能建文件"); } else printf("%s\n","没有空的登记拦2,不能建文件"); } else printf("%s\n","同名文件不能建立!"); }; void open(char pfname[20],char ooptype[10]) { int cltemp1=uno*L,cltemp2=(uno+1)*L; int cltemp3=uno*S,cltemp4=(uno+1)*S; while ((cltemp1 if(strcmp(ufd[cltemp1].fname,pfname)==0) { while ((cltemp3 if(strcmp(uof[cltemp3].fname,pfname)==0)//有文件 { if(uof[cltemp3].fstatue==0) printf("%s\n","文件已打开!"); else printf("%s\n","此文件正在建立,不能打开!"); } else//无文件 { if(strcmp(ufd[cltemp1].fattr,ooptype)!=0) printf("%s\n","操作不合法,不能打开!"); else { cltemp3=uno*S; while ((cltemp3