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

📄 igetput.c

📁 基于UNIX6的文件系统模拟程序
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>#include "filesys.h"struct inode *iget(dinodeid)unsigned int dinodeid;{	int existed=0,inodeid;	long addr;	struct inode *temp,*newinode;	inodeid = dinodeid%NHINO;	if(hinode[inodeid].i_forw == NULL)		existed=0;	else	{		temp = hinode[inodeid].i_forw;		while(temp)		{			if(temp->i_ino == inodeid)			/*existed*/			{				existed = 1;				temp->i_count++;				return temp;			}			/*not existed*/			else				temp = temp->i_forw;		};	}	/*not existed*/	/* 1.calculate the addr of the dinode in the file sys column */	addr = DINODESTART+dinodeid*DINODESIZ;	/* 2.malloc the new inode */	newinode = (struct inode *)malloc(sizeof(struct inode));	/* 3.read the dinode to the inode */	fseek(fd,addr,SEEK_SET);	fread(&(newinode->di_number),DINODESIZ,1,fd);	/* 4.put it into hinode[inodeid] queue */	newinode->i_forw = hinode[inodeid].i_forw;	newinode->i_back = &hinode[inodeid];//newinode;	if(newinode->i_forw != NULL)		newinode->i_forw->i_back = newinode;	hinode[inodeid].i_forw = newinode;	/* 5. initialize the inode */	newinode->i_count = 1;	newinode->i_flag = 0; /*flag for not update */	newinode->i_ino = dinodeid;	return newinode;}iput(pinode)struct inode *pinode;{	long addr;	unsigned int block_num;	int i;	if(pinode->i_count >1)	{		pinode->i_count--;		return;	}	else	{		if(pinode->di_number != 0)		{			/* write back the inode */			addr = DINODESTART+pinode->i_ino*DINODESIZ;			fseek(fd,addr,SEEK_SET);			fwrite(&pinode->di_number,DINODESIZ,1,fd);

//			printf("in iput %d",pinode->di_size);		}		else		{			/*rm the inode &the block of the file in the disk */			block_num = pinode->di_size/BLOCKSIZ;			for(i=0;i<block_num;i++)			{				balloc(pinode->di_addr[i]);			}			ifree(pinode->i_ino);		}		/* free the inode in the memory */		if(pinode->i_forw == NULL)			pinode->i_back->i_forw = NULL;		else		{			pinode->i_forw->i_back = pinode->i_back;			pinode->i_back->i_forw = pinode->i_forw;		}		free(pinode);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -