📄 ballfre.c
字号:
#include <stdio.h>
#include "filesys.h"
static unsigned int block_buf[BLOCKSIZ/sizeof(int)];
unsigned int balloc()
{
unsigned int free_block,free_block_num;
int i,j;
if(filsys.s_nfree==0)
{
printf("\nDisk Full!!!\n");
return DISKFULL;
};
/* fseek(fd,filsys.s_hblock.hb_cur,SEEK_SET);
fwrite(&filsys.s_hblock,1,sizeof(struct hblock),fd);
fseek(fd,filsys.s_hblock.hb_fowd,SEEK_SET);
fread(&filsys.s_hblock,1,sizeof(struct hblock),fd);
for (i = 0; i < NICFREE-1; ++i) {
printf("[%d],", filsys.s_hblock.hb_fblock[i]);
}
printf("\n");
for (i = 0; i < NICFREE-1; ++i) {
printf("[%d],", filsys.s_hblock.hb_bmap[i]);
}
getch();*/
free_block = filsys.s_hblock.hb_fblock[filsys.s_hblock.hb_pblock];
filsys.s_hblock.hb_bmap[filsys.s_hblock.hb_pblock] = 1;
if(filsys.s_hblock.hb_size == 1)
{
printf("CHANGE GROUP~\n");
getch();
fseek(fd,filsys.s_hblock.hb_cur,SEEK_SET);
fwrite(&filsys.s_hblock,1,sizeof(struct hblock),fd);
fseek(fd,filsys.s_hblock.hb_fowd,SEEK_SET);
fread(&filsys.s_hblock,1,sizeof(struct hblock),fd);
for (i = 0; i < NICFREE-1; ++i) {
printf("[%d],", filsys.s_hblock.hb_fblock[i]);
}
printf("\n");
for (i = 0; i < NICFREE-1; ++i) {
printf("[%d],", filsys.s_hblock.hb_bmap[i]);
}
}
else {
for (j = 0; j < NICFREE-1; ++j) {
//printf("<%d,%d>", j, filsys.s_hblock.hb_bmap[j]);
if (filsys.s_hblock.hb_bmap[j] == 0) {
filsys.s_hblock.hb_pblock = j;
break;
}
}
//filsys.s_hblock.hb_pblock++;
//printf("%d\n", filsys.s_hblock.hb_pblock);
filsys.s_hblock.hb_size--;
}
filsys.s_nfree--;
filsys.s_fmod=SUPDATE;
printf("Balloc %d block, total free %d block, group free %d block\n", free_block, filsys.s_nfree, filsys.s_hblock.hb_size);
return free_block;
}
bfree(block_num)
unsigned int block_num;
{
int i,j;
if(filsys.s_hblock.hb_size == NICFREE-1) /* s-free full */
{
printf("bfree CHANGE GROUP~\n");
fseek(fd,filsys.s_hblock.hb_cur,SEEK_SET);
fwrite(&filsys.s_hblock,1,sizeof(struct hblock),fd);
fseek(fd,filsys.s_hblock.hb_back,SEEK_SET);
fread(&filsys.s_hblock,1,sizeof(struct hblock),fd);
}
for (j = 0; j < NICFREE-1; ++j) {
if ( filsys.s_hblock.hb_bmap[j] == 1 ) {
filsys.s_hblock.hb_fblock[j] = block_num;
filsys.s_hblock.hb_bmap[j] = 0;
filsys.s_hblock.hb_pblock = j;
filsys.s_hblock.hb_size++;
break;
}
}
filsys.s_nfree++;
filsys.s_fmod=SUPDATE;
printf("BFree %d block, total free %d block\n", block_num, filsys.s_nfree);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -