#include <stdio.h>
#include <iostream.h>
#include <windows.h>
#include <string.h>
#define NUM_BLOCKS 100
#define BLOCK_SIZE 50
#define RELIABILITY 0.95
#define PERIOD 2147483647.0
#define ERROR 0
//#define NO_ERROR 1
#define empty 0
#define false 0
#define true 1
static int threshold;
static char *bList[NUM_BLOCKS];
void initDisk()
{
int i=0;
for(i=0; i<NUM_BLOCKS; i++)
bList[i]=empty;
threshold=(int)(RELIABILITY*PERIOD);
Sleep(2000);
}
int dRead(int addr,char *buf)
{
int i;
char *bufPtr;
if(addr>=NUM_BLOCKS) return ERROR;
if(rand()>threshold) return ERROR;
if(bList[addr]!=empty)
{
bufPtr=bList[addr];
for (i=0;i<BLOCK_SIZE;i++)
buf[i]=*bufPtr++;
}
else
for(i=0;i<BLOCK_SIZE;i++) buf[i]=0;
return NO_ERROR;
}
int dWrite(int addr,char *buf)
{
int i;
char *bufPtr;
if(addr>=NUM_BLOCKS) return ERROR;
if(rand()>threshold) return ERROR;
if(bList[addr]==empty)
{
bList[addr]=(char *)malloc(BLOCK_SIZE);
}
bufPtr=bList[addr];
for(i=0; i<BLOCK_SIZE; i++)
{
*bufPtr++=buf[i];
}
return NO_ERROR;
}
struct WenList;
struct FCB
{
char name[20];
unsigned int condition;
unsigned int length;
char time[20];
unsigned int number_begin;
WenList *head;
};
struct Child
{
char name[20];
int number;
int condition;
FCB *fcb;
};
struct Root
{
int number;
char name[20];
Child *child;
};
Root *R_zhen[5];
Child *C_zhen[5];
bool build_root()//MFD初始化,设置五个固定用户
{
Root* Rs0;
Rs0=new Root;
strcpy(Rs0->name,"LiHong#");//用户LiHong
R_zhen[0]=Rs0;
Root* Rs1;
Rs1=new Root;
strcpy(Rs1->name,"ZhangTing#");//用户ZhangTing
R_zhen[1]=Rs1;
Root* Rs2;
Rs2=new Root;
strcpy(Rs2->name,"WangTao#");//用户WangTao
R_zhen[2]=Rs2;
Root* Rs3;
Rs3=new Root;
strcpy(Rs3->name,"LiuHai#");//用户LiuHai
R_zhen[3]=Rs3;
Root* Rs4;
Rs4=new Root;
strcpy(Rs4->name,"MaFeng#");//用户MaFeng
R_zhen[4]=Rs4;
return 1;
}
bool build_child(char name[20])//UFD初始化,创建一个大小为5的空数组链表
{
int sign=1;
int i=0;
while(i<5)
{
int sign=1;
int j=0;
while(j<20)
{
//cout<<R_zhen[i]->name[j]<<" "<<name[j]<<endl;
if(R_zhen[i]->name[j]!=name[j])
{ sign=0;break;}
if((R_zhen[i]->name[j]=='#'&&name[j]!='#')||(R_zhen[i]->name[j]!='#'&&name[j]=='#'))
{ sign=0;break;}
if(R_zhen[i]->name[j]=='#'&&name[j]=='#')
{ break;}
j++;
}
if(sign==1)//在MFD中找到用户
{
Child *C_zhen[5];
for(int n=0;n<5;n++)
{
C_zhen[n]=NULL;
}
Child* Cs0;//==========以下分别初始化每个UFD表项
Cs0=new Child;
strcpy(Cs0->name," ");//名字初始化为空字符
Cs0->condition=0;//condition初始化0
C_zhen[0]=Cs0;
Child* Cs1;
Cs1=new Child;
strcpy(Cs1->name," ");
Cs1->condition=0;
C_zhen[1]=Cs1;
Child* Cs2;
Cs2=new Child;
strcpy(Cs2->name," ");
Cs2->condition=0;
C_zhen[2]=Cs2;
Child* Cs3;
Cs3=new Child;
strcpy(Cs3->name," ");
Cs3->condition=0;
C_zhen[3]=Cs3;
Child* Cs4;
Cs4=new Child;
strcpy(Cs4->name," ");
Cs4->condition=0;
C_zhen[4]=Cs4;//==========初始化结束
switch(i)//判断为哪个用户创建UFD
{
case 0: R_zhen[0]->child=C_zhen[0];break;
case 1: R_zhen[1]->child=C_zhen[0];break;
case 2: R_zhen[2]->child=C_zhen[0];break;
case 3: R_zhen[3]->child=C_zhen[0];break;
case 4: R_zhen[4]->child=C_zhen[0];break;
}
cout<<"Your UFD is built! "<<endl;
return true;
}
i++;
}
cout<<"illegal Operating! "<<endl;
return false;
}
bool insert_WenJian(char name[20],FCB *fcb)//在UFD中创建文件fcb,name为用户名
{
int i=0;
while(i<5)
{
int sign=100;
int j=0;
while(j<20)//在MFD中找与参数name匹配的UFD称
{
if(R_zhen[i]->name[j]!=name[j])
{ sign=0; break;}
if((R_zhen[i]->name[j]=='#'&&name[j]!='#')||(R_zhen[i]->name[j]!='#'&&name[j]=='#'))
{ sign=0; break;}
if(R_zhen[i]->name[j]=='#'&&name[j]=='#')
{ sign=1; break;}
j++;
}
if(sign==1)//MFD中找到了匹配的UFD
{
Child *ptr;
ptr=new Child;
switch(i)
{
case 0:ptr=R_zhen[0]->child;break;
case 1:ptr=R_zhen[1]->child;break;
case 2:ptr=R_zhen[2]->child;break;
case 3:ptr=R_zhen[3]->child;break;
case 4:ptr=R_zhen[4]->child;break;
}//设置UFD的指针
int k=0;
while(k<5)
{
if(ptr->condition==0)
{
ptr->condition=1;
strcpy(ptr->name,fcb->name);
cout<<"Your WenJian ' ";
for(int m=0;m<20;m++)
{
if(ptr->name[m]!='#')
{
cout<<ptr->name[m]; continue;
}
break;
}
cout<<" ' is built in your mulu! "<<endl;
ptr->fcb=fcb; return true;
}
if(k==4)
{
cout<<"The UFD is full! "<<endl; return false;
}
k++; ptr=ptr+1;
}//#end while(k<5)*/
}//#end if*/
i++;
}//#end while(i<5)
cout<<" illegal user! "<<endl;
return false;
}
bool show_UFD(char name[20])//参数为用户名
{
int i=0;
while(i<5)
{
int sign=100;
int j=0;
while(j<20)//在MFD中找与参数name匹配的UFD
{
if(R_zhen[i]->name[j]!=name[j])
{ sign=0; break;}
if((R_zhen[i]->name[j]=='#'&&name[j]!='#')||(R_zhen[i]->name[j]!='#'&&name[j]=='#'))
{ sign=0; break;}
if(R_zhen[i]->name[j]=='#'&&name[j]=='#')
{ sign=1; break;}
j++;
}
if(sign==1)//MFD中找到了匹配的UFD
{
Child *ptr;
ptr=new Child;
switch(i)
{
case 0:ptr=R_zhen[0]->child;break;
case 1:ptr=R_zhen[1]->child;break;
case 2:ptr=R_zhen[2]->child;break;
case 3:ptr=R_zhen[3]->child;break;
case 4:ptr=R_zhen[4]->child;break;
}//设置UFD的指针
int k=0; int Empty=0;
while(k<5)
{
if(ptr->condition==1)//显示文件名
{
Empty=1;
for(int m=0;m<20;m++)
{
if(ptr->name[m]!='#')
{
cout<<ptr->name[m]; continue;
}cout<<endl;
break;
}
cout<<endl;
}
k++; ptr=ptr+1;
}//#end while(k<5)*/
if(Empty==0)
{
cout<<" The UFD is empty! "<<endl;
return false;
}
return true;
}//#end if*/
i++;
}//#end while(i<5)
cout<<"illegal user! "<<endl;
return false;
}
bool delete_FCB(char name[20],char W_name[20])
{
int i=0;
while(i<5)
{
int sign=100;
int j=0;
while(j<20)//在MFD中找与参数name匹配的UFD称
{
if(R_zhen[i]->name[j]!=name[j])
{ sign=0; break;}
if((R_zhen[i]->name[j]=='#'&&name[j]!='#')||(R_zhen[i]->name[j]!='#'&&name[j]=='#'))
{ sign=0; break;}
if(R_zhen[i]->name[j]=='#'&&name[j]=='#')
{ sign=1; break;}
j++;
}
if(sign==1)//MFD中找到了匹配的UFD
{
Child *ptr;
ptr=new Child;
switch(i)
{
case 0: ptr=R_zhen[0]->child;break;
case 1: ptr=R_zhen[1]->child;break;
case 2: ptr=R_zhen[2]->child;break;
case 3: ptr=R_zhen[3]->child;break;
case 4: ptr=R_zhen[4]->child;break;
}//设置UFD的指针
int k=0;
while(k<5)
{ //cout<<ptr->condition<<endl;
if(ptr->condition==1)
{
int sign_W=100;
int j=0;
while(j<20)//在MFD中找与参数name匹配的UFD称
{
if(ptr->name[j]!=W_name[j])
{ sign_W=0; break;}
if((ptr->name[j]=='#'&&W_name[j]!='#')||(ptr->name[j]!='#'&&W_name[j]=='#'))
{ sign_W=0; break;}
if(ptr->name[j]=='#'&&W_name[j]=='#')
{ sign_W=1; break;}
j++;
}
if(sign_W==1)
{
for(int q=0;q<20;q++)//将文件名置空
{
ptr->na
没有合适的资源?快使用搜索试试~ 我知道了~
实现磁盘转储功能,使文件可以从虚拟磁盘转入内存中
共1个文件
cpp:1个
3星 · 超过75%的资源 需积分: 12 16 下载量 167 浏览量
2017-11-14
15:16:32
上传
评论 2
收藏 4KB RAR 举报
温馨提示
建立内存文件系统 在内存中建立一个虚拟磁盘; 建立文件系统; 设计合理的数据结构,管理虚拟磁盘中已分配和未分配的盘块; 设计相应的目录结构,文件控制块等来管理系统中的文件; 实现文件的创建,删除,移位和改名; 设计可视化界面,显示已分配和未分配的磁盘空间; 实现磁盘转储功能,使文件可以从虚拟磁盘转入内存中
资源推荐
资源详情
资源评论
收起资源包目录
建立内存文件系统 在内存中建立一个虚拟磁盘; 建立文件系统; 设计合理的数据结构,管理虚拟磁盘中已分配和未分配的盘块; 设计相应的目录结构,文件控制块等来管理系统中的文件; 实现文件的创建,删除,移位和改名; 设计可视化界面,显示已分配和未分配的磁盘空间; 实现磁盘转储功能,使文件可以从虚拟磁盘转入内存中。.rar (1个子文件)
wenjian.cpp 16KB
共 1 条
- 1
资源评论
- 史俊峰在搬砖2018-02-27代码质量一般
heary29
- 粉丝: 32
- 资源: 70
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功