📄 文件索引.cpp
字号:
/*磁盘索引文件*/
# include<stdio.h>
# include<stdlib.h>
/*文件系统定义的数据结构*/
struct index /*文件索引表的定义*/
{
int lr[32]; /*逻辑块号数组*/
int pr[32]; /*物理块号数组*/
char st[32];/*状态数组*/
} * wq;
struct list
{
char names[32];/*文件名*/
int size[32]; /*文件大小*/
struct index *p[32];/*文件的索引表地址*/
} * HEAD;
struct que
{
char name;
int size;
struct que *next;
} *job,*top,*head; /*定义一个作业清单*/
int i,j,ly,li;
char bb; //定义一个输入回车键的字符
int N=0; /*N代表系统的总文件数*/
int M=32; /*M代表系统中空闲磁盘块数*/
int J[4][8]; /*定义一个人四维数组*/
FILE *e; //定义一个文件指针
int jobs=0;/*初始化jobs*/
void run()/**/
{
int x,y,z;
int FIND=0;
for(x=0;x<N;x++)
if(HEAD->names[x]==top->next->name)
FIND=1;
if(FIND==0)
{
if(top->next->size<=M)
{
ly=0;
M-=top->next->size;
HEAD->names[N]=top->next->name;
HEAD->size[N]=top->next->size;
wq=(struct index *)malloc(sizeof(struct index));//申请内存空间
HEAD->p[N]=wq;
N++;
for(z=0;z<32;z++)
{
wq->lr[z]=z;
wq->pr[z]=0;
wq->st[z]='N';
}
for(j=0;(j<4)&&(ly<top->next->size);j++)
for(i=0;(i<8)&&(ly<top->next->size);i++)
{
if(J[j][i]==0)
{
li=j*8+i;
wq->pr[ly]=li;
wq->st[ly]='Y';
ly++;
J[j][i]=1;
}
}
}
else
{
fprintf(e,"\n 存储器中没有空闲块!\n");//把这些字符输出到文件指针e中
fprintf(e,"文件 %c 必须等待!\n",top->next->name);//**文件必须等待
}
}
else
{
fprintf(e,"\n ... 文件%c 已经加载到系统!...\n",top->next->name);//**文件已经加载
}
top->next=top->next->next;
fprintf(e,"***********************此时,文件目录为:*********************\n");
//“这次文件指向的目录”输出到文件指针e中
fprintf(e," 名字 索引地址\n");
for(x=0;x<N;x++)
fprintf(e," %c %x\n",HEAD->names[x],HEAD->p[x]);
for(x=0;x<N;x++)
{
fprintf(e," ===================文件 %c 的索引为:===============\n",HEAD->names[x]);
fprintf(e," 逻辑编号 物理编号 标志态\n");
for(y=0;y<HEAD->size[x];y++)
fprintf(e," %d %d %c\n",HEAD->p[x]->lr[y],HEAD->p[x]->pr[y],HEAD->p[x]->st[y]);
}
fprintf(e," ----------------此时,文件位示图为:---------------\n");
for(j=0;j<4;j++)
{
fprintf(e," ");
for(i=0;i<8;i++)
fprintf(e," %d",J[j][i]);
fprintf(e,"\n");
}
}
void main()
{
int k;
e=fopen("results.txt","w");//打开名为results.txt的文件,使用文件方式为“只写”,e指向results.txt文件
for(j=0;j<4;j++)
for(i=0;i<8;i++)
J[j][i]=0;
HEAD=(struct list *)malloc(sizeof(struct list));//申请内存空间
for(i=0;i<32;i++)
{
HEAD->names[j]=' ';
HEAD->size[i]=0;
HEAD->p[i]=NULL;
}
printf("请输入作业个数:");
scanf("%d",&jobs);
scanf("%c",&bb);
job=(struct que *)malloc(sizeof(struct que));
job->name=' ';
job->size=0;
job->next=NULL;
top=job;
head=top;
for(k=1;k<=jobs;k++)
{
job=(struct que *)malloc(sizeof(struct que));
job->next=NULL;
printf("文件 %d:\n",k);
fprintf(e,"FILE %d:\n",k);
printf("名字和大小:");
scanf("%c,%d",&(job->name),&(job->size));
scanf("%c",&bb);
fprintf(e,"%c,%d\n",job->name,job->size);
if(top->next==NULL)
{
top->next=job;
head=job;
}
else
{
head->next=job;
head=job;
}
}
for(k=1;k<=jobs;k++)
run();
fclose(e);
for(i=0;i<32;i++)
{
free(HEAD->p[i]);
HEAD->p[i]=NULL;
}
free(HEAD);
HEAD=NULL;
while(top->next!=NULL)
{
struct que *tmp=top->next;
top=top->next;
free(tmp);
tmp=NULL;
}
free(top);
top=NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -