return pwrite(fd,&sup,sizeof(struct super),0); }
int mapio(int i,int j)//é???”?iè????1 {
unsigned short fi=0x8000; fi=fi>>j; fi=~fi; //int k=0;
sup.i[i]=sup.i[i]&fi; return sup.i[i]; }
int mapip(int i,int j)//è?·???iè????1 {
unsigned short fi=0x8000; fi=fi>>j; //int k=0;
sup.i[i]=sup.i[i]|fi; return sup.i[i]; }
struct ij see()//??¥?‰???oé?2???inode {
int k=0;
struct ij kl; while(k<8) {
int f,l=0;
unsigned short gl=0x8000; do{
f=gl&sup.i[k]; gl=gl>>1; l++;
}while(f!=0&&l<=N); if(f==0) {
kl.i=k; kl.j=l-1; return kl; } k++; }
kl.i=-1; kl.j=-1;
return kl; }
int i_addr()//???é…?inode {
int b=-1;
if(sup.iclock==0) {
sup.iclock=1;
struct ij gg=see();
if(gg.i>-1&&gg.j>-1){ b=gg.i*16+gg.j; mapip(gg.i,gg.j); }
sup.iclock=0; }
return b; }
int i_rel(int b)//????”?inode {
if(b>=0) {
if(sup.iclock==0) {
sup.iclock=1; int i=b/N; int j=b%N; mapio(i,j); sup.iclock=0; return 0; } }
return -1; }
/*
* super.h *
* Created on: 2014年12月26日 * Author: sunb */
#ifndef SUPER_H_ #define SUPER_H_
#define C_size 2048//文件系统的总块数 #define B_size 512//每块的字节数
#define D_size 2035//数据块的块数 #define D_beg 13//数据块的起始块号
#define I_size 12 //i节点块的总块数 #define IB_size 48 //i节点块的总块数 #define I_beg 1//i节点的起始块号 #define I_num 128//i节点的个数
#define M_fsize 58368//文件的最大所占字节数 #define B_Mf 114//文件的最大所占块数 #define B_Df 10//单级索引个数
#define DS_size 10//空闲盘块好栈中的空闲盘块的最大数目
#define N 16
#ifndef SUPER struct super{
unsigned int csize;//文件系统的总块数(4) unsigned short bsize;//每块的字节数(2)
unsigned int dsize;//数据块的块数(4) unsigned int dbeg;//数据块的起始块号(4) unsigned int demp;//空闲盘块数(4)
unsigned short isize; //i节点块的总块数(2) unsigned int ibeg;//i节点的起始块号(4) unsigned short inum;//i节点的个数(2) unsigned short i[8];//i节点位示图(12) unsigned short iclock;//inode锁(2)
unsigned int mfsize;//文件的最大所占字节数(4) unsigned short bmf;//文件的最大所占块数(2)
time_t bu;//修改时间(8)
short dssize;//当前空闲盘块好栈中的空闲盘块数目(2) unsigned int dss[DS_size];//(400)
unsigned short dsclock;//成组链接锁(2) }sup; #endif
//int mapio(unsigned short,unsigned short); //int mapip(unsigned short,unsigned short); void super(); int supread(); int supwrite(); int i_addr(); int i_rel(int); int fd;
#endif /* SUPER_H_ */ /*
* user.c *
* Created on: 2015?1′1???2??¥ * Author: sunb */
#include
char * makedir(char *route) {
char *makname=(char *)malloc(140); if(*route=='/') {
strcpy(makname,route); }
else if(*route=='.'&&(*(route+1)=='/'||*(route+1)=='\\0')){ int k=0;
相关推荐: