📄 inodemanage.c
字号:
#include <stdio.h>#include "filesys.h"void updateinodemap(unsigned short order , char flag);void updateinodetable(struct inode* ainode);struct inode* posinode(unsigned short nid){ struct inode* ainode=malloc(sizeof(struct inode)); fd=fopen("filesystem","r+"); fseek(fd,(3*BLOCKSIZE)+sizeof(struct inode)*nid,SEEK_SET); fread(ainode,sizeof(struct inode),1,fd); fclose(fd); return ainode; }/*ialloc function write the ainode to the filesys.o(ainode's address is already allocated).change the super->s_pinode and ainode->i_ino.*/struct inode* ialloc(struct inode* ainode){ unsigned short number=0; unsigned short i; struct inode* pinode; if(super->s_ninode==0) { printf("\n HAVE NO INODE LEFT!!!\n"); return NULL; } number=super->s_pinode; *(super->s_inode+number)='1'; updateinodemap(number,'1'); if(--super->s_ninode!=0) { for(i=0;i<INODENUMBER;i++) { if(*(super->s_inode +(super->s_pinode+i)%INODENUMBER)!='1') { super->s_pinode=(super->s_pinode+i)%INODENUMBER; updatesys(); break; } } } ainode->i_ino=number; updateinodetable(ainode); return ainode; } int ifree(unsigned short pos){ if(super->s_ninode + 1 > BLOCKNUM) { printf("\nDisk Error!!!\n"); return DISKFULL; } super->s_ninode++; *(super->s_inode+pos)='0'; updateinodemap(pos,'0'); super->s_pinode=pos; updatesys(); return DISKSUCCESS;} void updateinodemap(unsigned short order , char flag){ fd=fopen("filesystem","r+"); fseek(fd,(2*BLOCKSIZE)+order,SEEK_SET); fwrite(&flag,sizeof(char),1,fd); fclose(fd); }void updateinodetable(struct inode* ainode){ fd=fopen("filesystem","r+"); fseek(fd,(3*BLOCKSIZE)+sizeof(struct inode)*(ainode->i_ino),SEEK_SET); fwrite(ainode,sizeof(struct inode),1,fd); fclose(fd); }void* fchmod(char* name,unsigned short mode){ unsigned short nid; char* content; struct inode* pinode; nid=map2inode(name); if(nid==MAPERR) return NULL; pinode=(struct inode*)posinode(nid); pinode->di_mode=mode; updateinodetable(pinode); return pinode;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -