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

📄 install.c

📁 此版本是在网上广为流传的 二级文件系统 基础上制作的.重新编写了块操作等模块,修正了N多BUG. 实现的命令有 ls-列目录 md-创建目录 cd-进入子目录 mf-创建文件 cat-显示文件内
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include "filesys.h"
install()
{
   int i,j;
   struct inode *inode;
   /*... */
   strcpy(cur_path[0], "");
   dir_lv = 1;
   /* 0. open the file column */
   fd=fopen("filesystem","r+b");
   if(fd==NULL)
   {
       printf("\nfilesys can not be loaded \n");
       exit(0);
   }
   /* 0.5. initialize the user */
   inode = iget(3);
//   printf("#%d#", inode->di_addr[0]);
   fseek(fd,DATASTART+inode->di_addr[0]*BLOCKSIZ,SEEK_SET);
   fread(user,1,BLOCKSIZ,fd);
//   printf("%s, %s\n", user[0].u_name, user[0].password);
   
   /* 1. read the filsys from the superblock */
   fseek(fd,0,SEEK_SET);
   fread(&filsys,1,sizeof(struct filsys),fd);
   
   /* 2. initialize the inode hash chain  */
   for(i=0;i<NHINO;i++)
   {
       hinode[i].i_forw=NULL;
   }
   
   /* 3. initialize the sys-ofile  */
   for(i=0;i<SYSOPENFILE;i++)
   {
       sys_ofile[i].f_count=0;
       sys_ofile[i].f_inode=NULL;
   }

   /* 5. read the main directory to initialize the dir */
   cur_path_inode=iget(1);
   dir.size=cur_path_inode->di_size/(DIRSIZ+2);
   for(i=0;i<DIRNUM;i++)
   {
       strcpy(dir.direct[i].d_name,"");
       dir.direct[i].d_ino=0;
   }
   for(i=0;i<dir.size/(BLOCKSIZ/(DIRSIZ+2));i++)
   {   
    fseek(fd,DATASTART+BLOCKSIZ*cur_path_inode->di_addr[i],SEEK_SET);
    fread(&dir.direct[(BLOCKSIZ/(DIRSIZ+2))*i],1,BLOCKSIZ,fd);
   }
   fseek(fd,DATASTART+BLOCKSIZ*cur_path_inode->di_addr[i],SEEK_SET);  
   fread(&dir.direct[(BLOCKSIZ)/(DIRSIZ+2)*i],1,cur_path_inode->di_size%BLOCKSIZ,fd);
}

⌨️ 快捷键说明

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