📄 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;
unsigned int i;
if(filsys.s_nfree == 0)
{
printf ("\nDisk Full!!! \n");
return DISKFULL;
}
free_block = filsys.s_free[filsys.s_pfree]; //分配的块号
if(filsys.s_pfree == 0)
{
fseek(fd, DATASTART+BLOCKSIZ*(free_block-1), SEEK_SET);
fread(block_buf, 1, BLOCKSIZ, fd);
free_block_num = block_buf[NICFREE];
for (i=0; i<free_block_num; i++)
{
filsys.s_free[i] = block_buf[i];
}
filsys.s_pfree= free_block_num-1;
}
else filsys.s_pfree--;
filsys.s_nfree--;
filsys.s_fmod=SUPDATE;
return free_block;
}
bfree(unsigned int block_num)
{
int i;
if(filsys.s_pfree == NICFREE-1) /* if s_free full */
{
block_buf[NICFREE] = NICFREE;
for (i=0; i<NICFREE; i++)
{
block_buf[i]=filsys.s_free[i];
}
filsys.s_pfree = -1;
fseek(fd, DATASTART+BLOCKSIZ*(block_num-1), SEEK_SET);
fwrite(block_buf, 1, BLOCKSIZ, fd);
}
filsys.s_free[++filsys.s_pfree] = block_num;
filsys.s_nfree++;
filsys.s_fmod = SUPDATE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -