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

📄 ballfre.c

📁 操作系统课程设计
💻 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 + -