📄 ballfre.c
字号:
/************************************************/
/* */
/* ballfre.c */ // 该文件已经完成
/* */
/************************************************/
#include <stdio.h>
#include "filsys.h"
static unsigned int block_buf[BLOCKSIZ];
/* 空闲盘块分配函数 */
unsigned int balloc()
{
unsigned int free_block, free_block_num;
int i;
if( filsys.s_nfree == 0 ) /* 磁盘已满,无空闲盘块 */
{
printf( "Disk has no space\n" );
return -1;
}
free_block = filsys.s_free[filsys.s_pfree];
if( filsys.s_pfree == 0 ) /* 已经是栈底 */
{
/* 读取栈底盘块号所对应的盘块数据 */
bread( filsys.s_free[filsys.s_pfree], block_buf );
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--; /* 空闲盘块少1 */
// filsys.s_fmod = SUPDATE; /* 置超级块修改标志 */
return free_block;
}
/* 空闲盘块回收函数 */
bfree( unsigned int block_num )
{
int i;
filsys.s_pfree++;
if( filsys.s_pfree == NICFREE ) /* 空闲盘块堆栈已满 */
{
block_buf[NICFREE] = NICFREE; /* 空闲盘块堆栈的盘块数NICFREE记入缓冲区 */
for( i = 0; i < NICFREE; i++ )
block_buf[i] = filsys.s_free[i]; /* 把空闲盘块数据写入缓冲区 */
filsys.s_pfree = 0; /* 栈指针指向栈底 */
bwrite( block_num, block_buf ); /* 缓冲区内容写入新回收的盘块 */
}
filsys.s_free[filsys.s_pfree] = block_num; /* 回收盘块 */
filsys.s_nfree++; /* 空闲盘块多1 */
// filsys.s_fmod = SUPDATE; /* 置超级块修改标志 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -