- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统 文件系统 实验程序
一 . 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。
程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UD)。另外,为打开文件设置了运行文件目录(AFD)。在执行读写命令时,需改读写指针因系统小,文件目录的检索使用了简单的线性搜索。文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)打开文件目录(AFD)(即运行文件目录) M D F
用户名
文件目录指针
U F D
文件名
保护码
文件长度
A F D
打开文件名
打开保护码
读写指针
文件系统算法的流程图如下:#includestdio.h
#includestring.h
#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 ((cltemp1cltemp2)(strcmp(ufd[cltemp1].fname,cfname)!=0))
cltemp1++;
if(strcmp(ufd[cltemp1].fname,cfname)!=0)
{
cltemp1=uno*L;
while ((cltemp1cltemp2)(strcmp(ufd[cltemp1].fname,)!=0)) cltemp1++;
if(strcmp(ufd[cltemp1].fname,)==0)
{
frd=cltemp1;
cltemp1=uno*S;
cltemp2=(uno+1)*S;
while ((cltemp1cltemp2)(strcmp(uof[cltemp1].fname,)!=0)) 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=d
文档评论(0)