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

📄 iallfre.c

📁 此版本是在网上广为流传的 二级文件系统 基础上制作的.重新编写了块操作等模块,修正了N多BUG. 实现的命令有 ls-列目录 md-创建目录 cd-进入子目录 mf-创建文件 cat-显示文件内
💻 C
字号:
#include <stdio.h>
#include "filesys.h"
static struct dinode block_buf[BLOCKSIZ/DINODESIZ];
struct inode *ialloc()   /*  ialloc  */
{
   struct inode *temp_inode;
   unsigned int cur_di;
   int i,count,block_end_flag;

   if(filsys.s_pinode==NICINOD)    /*  s_inode empty  */
   {
      i=0;
      count=0;
      block_end_flag=1;
      filsys.s_pinode=NICINOD-1;
      cur_di=filsys.s_rinode;
      while((count<NICINOD) || (count<=filsys.s_ninode))
      {
       if(block_end_flag)
        {
            fseek(fd,DINODESTART+cur_di*DINODESIZ,SEEK_SET);
            fread(block_buf,1,BLOCKSIZ,fd);
            block_end_flag=0;
            i=0;
        }  
       while(block_buf[i].di_mode==DIEMPTY)
        {
            cur_di++;
            i++;
        }
       if(i==NICINOD)
           block_end_flag=1;
        else
        {
            filsys.s_inode[filsys.s_pinode--]=cur_di;
            count++;
        }
     }
     filsys.s_rinode=cur_di;
   }
   temp_inode=iget(filsys.s_inode[filsys.s_pinode]);
   fseek(fd, DINODESTART+filsys.s_inode[filsys.s_pinode]*DINODESIZ, SEEK_SET);
   fwrite(&temp_inode->di_number,1,sizeof(struct dinode),fd);
   filsys.s_pinode++;
   filsys.s_ninode--;
   filsys.s_fmod=SUPDATE;
   return temp_inode;
 }

ifree(dinodeid)    /*  ifree  */
unsigned dinodeid;
{
   filsys.s_ninode++;
   if(filsys.s_pinode!=NICINOD)    /* not full  */
   {
       filsys.s_inode[filsys.s_pinode]=dinodeid;
       filsys.s_pinode++;
   }
   else  /*full */
   {
       if(dinodeid<filsys.s_rinode)
   {
       filsys.s_inode[NICINOD]=dinodeid;
       filsys.s_rinode=dinodeid;
   }
   }

}

⌨️ 快捷键说明

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