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

📄 filesys.h

📁 此版本是在网上广为流传的 二级文件系统 基础上制作的.重新编写了块操作等模块,修正了N多BUG. 实现的命令有 ls-列目录 md-创建目录 cd-进入子目录 mf-创建文件 cat-显示文件内
💻 H
字号:
/*   #define NULL     0 */
   #define FILENAMELEN 32
   #define BLOCKSIZ 512 
   #define SYSOPENFILE 40 
   #define DIRNUM 32 
   #define DIRSIZ 14 
   #define PWDSIZ 12 
   #define PWDNUM 32 
   #define NOFILE 20 
   #define NADDR 10 
   #define NHINO 128    /*  must be power of 2 */ 
   #define USERNUM 8 
   #define DINODESIZ 32 
   /*  filsys  */ 
   #define DINODEBLK 32 
   #define FILEBLK 512 
   #define NICFREE 50 
   #define NICINOD 50 
   #define DINODESTART 2*BLOCKSIZ 
   #define DATASTART (2+DINODEBLK)*BLOCKSIZ 
    /* di-mode*/ 
   #define DIEMPTY        00000 
   #define DIFILE        01000 
   #define DIDIR        02000 
   #define UDIREAD        00001  /* user */ 
   #define UDIWRITE     00002 
   #define UDIEXICUTE     00004 
   #define GDIREAD        00010  /*group  */ 
   #define GDIWRITE     00020 
   #define GDIEXICUTE      00040 
   #define ODIREAD        00100  /*otfier*/ 
   #define ODIWRITE     00200 
   #define ODIEXICUTE     00400 
   #define READ        1 
   #define WRITE       2 
   #define EXICUTE    3 
   #define DEFAULTMODE     00777 
   /* i_flag */ 
   #define IUPDATE 00002 
   /* s_fmod */ 
   #define SUPDATE 00001
   /* f_flag */ 
   #define FREAD        00001 
   #define FWRITE        00002 
   #define FAPPEND        00004 
   /* error */ 
   #define DISKFULL     65535 
   /* fseek origin */ 
   #define SEEK_SET    0 
   /*文件系统  数据结构*/ 
 struct inode{ 
   struct inode *i_forw; 
   struct inode *i_back;   
   char i_flag; 
   unsigned int i_ino;    /*磁盘i节点标志*/ 
   unsigned int i_count;    /*引用计数*/ 
   unsigned short di_number;    /*关联文件数。当为0时,则删除该文件*/ 
   unsigned short di_mode;    /*存取权限*/ 
   unsigned short di_uid; 
   unsigned short di_gid; 
   unsigned int di_size;    /*文件大小*/ 
   unsigned short di_addr[NADDR];    /*物理块号*/ 
   }; 

 struct dinode{ 
   unsigned short di_number;    /*关联文件数*/ 
   unsigned short di_mode;    /*存取权限*/ 
   unsigned short di_uid; 
   unsigned short di_gid; 
   unsigned int di_size;    /*文件大小*/ 
   unsigned short di_addr[NADDR];    /*物理块号*/ 
  }; 

 struct direct{ 
   char d_name[DIRSIZ]; 
   unsigned short d_ino; 
  }; 

 struct hblock {
     unsigned int hb_cur;
     unsigned int hb_fowd;
     unsigned int hb_back;
     unsigned int hb_size;
     unsigned short hb_pblock;
     unsigned int hb_fblock[NICFREE-1];
     unsigned short hb_bmap[NICFREE-1];
 };
 
 struct blockmap {
     int fill[NICFREE-1];
 };        
     

 struct filsys{ 
   unsigned short s_isize;        /* i节点块块数*/ 
   unsigned long s_fsize;          /* 数据块块数 */ 
   unsigned int s_nfree;        /* 总空闲块 */ 
   
//   unsigned short s_pfree;        /* 空闲块指针 */ 
//   unsigned int s_free[NICFREE];    /* 空闲块堆栈 */ 
   struct hblock s_hblock;
//   struct blockmap s_blockmap;
   unsigned int s_ninode;        /* number of free inode in s_inode*/ 
   unsigned short s_pinode;    /* pointer of the sinode */ 
   unsigned int s_inode[NICINOD];    /* 空闲i节点数组 */ 
   unsigned int s_rinode;    /* remember inode */ 
   char s_fmod;    /*超级块修改标志*/ 
   }; 

 struct dir{ 
   struct direct direct[DIRNUM]; 
   int size; /* 当前目录大小 */ 
   }; 

 struct hinode{ 
   struct inode *i_forw;  /* hash表指针*/ 
   }; 
  
 struct file{ 
   char f_flag;    /*文件操作标志*/ 
   unsigned int f_count;    /*引用计数*/ 
   struct inode *f_inode;    /*指向内存i节点*/ 
   unsigned long f_off;    /*read/write character pointer*/ 
   }; 

struct user{
char           u_name[6];// 用户名
char           password [PWDSIZ]; // 用户密码 
//unsigned short u_dir_inode;        //记访问退出时录目录 
unsigned short u_default_mode;//访问权限
unsigned short u_uid;// 用户标志
unsigned short u_gid;// 用户组标志 
unsigned short u_ofile[NOFILE];// 用户打开表  //64b
};
  
 /*struct user{ 

   unsigned short u_default_mode; 

   unsigned short u_uid; 

   unsigned short u_gid; 

   unsigned short u_ofile[NOFILE];    /*用户打开文件表*/  

/*   }; 

 struct pwd{ 

   unsigned short p_uid; 

   unsigned short p_gid;   

   char password [PWDSIZ]; 

   };*/ 
   
   /*下为全局变量*/ 

   extern char cur_path[10][32];
   
   extern unsigned short dir_lv;
   
   extern struct hinode hinode[NHINO]; 

   extern struct dir dir;    /*  当前目录(在内存中全部读入)  */ 

   extern struct file sys_ofile[SYSOPENFILE]; 

   extern struct filsys filsys;    /*  内存中的超级块  */ 

   extern struct pwd pwd[PWDNUM]; 

   extern struct user user[USERNUM]; 

   extern FILE *fd;  /*  the file system column of all the system  */ 

   extern struct inode * cur_path_inode; 

   extern int user_id,file_block; 

   /*  proptype of the sub roution used in the file system  */ 

   extern struct inode *iget(); 

   extern iput(); 

   extern unsigned int balloc(); 

   extern bfree();   

   extern struct inode *ialloc(); 

   extern ifree(); 

   extern unsigned int namei(); 

   extern unsigned short iname(); 

   extern unsigned int access(); 

   extern _dir();   

   extern dirlt(); 

   extern mkdir(); 

   extern chdir(); 

   extern unsigned short open(); 

   extern creat(); 

   extern unsigned int read(); 

   extern unsigned int write(); 

   //extern int login(); 

   extern int login(char*,char*);

   extern void regist(int id);

   extern install(); 

   extern format(); 

   extern close(); 

   extern halt();  
    
   extern cat (char*);
   
   extern vi (char*);

⌨️ 快捷键说明

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