⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ballfre.c

📁 设计并实现一个多用户多级目录结构的文件系统
💻 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 + -