📄 iallfre.c
字号:
/* i节点分配与释放函数*/
#include <stdio.h>
#include "filesys.h"
static struct dinode block_buf[BLOCKSIZ/DINODESIZ];
struct inode * ialloc()
{
struct inode * temp_inode;
unsigned int cur_di;
int i, count, block_end_flag;
if (filsys. s_pinode== NICINOD)
{
i=0;
count = 0;
block_end_flag= 1;
filsys.s_pinode=NICINOD-1;
cur_di=filsys.s_rinode;
while ((count <NICINOD)||(count <=filsys.s_ninode))
{
if (block_end_flag)
{
fseek(fd,DINODESTART+cur_di*DINODESIZ,SEEK_SET);
fread(block_buf, 1,BLOCKSIZ,fd);
block_end_flag=0;
i=0;
}
while (block_buf[i].di_mode != DIEMPTY)
{
cur_di++;
i++;
}
if (i==NICINOD)
block_end_flag=1;
else
{
filsys.s_inode[filsys.s_pinode--]= cur_di;
count++;
}
}
filsys.s_rinode=cur_di;
}
temp_inode=iget(filsys.s_inode[filsys.s_pinode]);
fseek (fd, DINODESTART+filsys.s_inode[filsys.s_pinode]* DINODESIZ,SEEK_SET);
fwrite (&temp_inode->di_number,1,sizeof (struct dinode), fd);
filsys.s_pinode++;
filsys.s_ninode--;
filsys.s_fmod =SUPDATE;
return temp_inode;
}
ifree(dinodeid) /* ifree */
unsigned dinodeid;
{
filsys.s_ninode++;
if (filsys.s_pinode != NICINOD) /* notfull */
{
filsys.s_pinode --;
filsys.s_inode[filsys.s_pinode]=dinodeid;
}
else /* full */
{
if (dinodeid <filsys.s_rinode)
{
filsys.s_inode[NICINOD] =dinodeid;
filsys.s_rinode=dinodeid;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -