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

📄 ballfre.c

📁 此版本是在网上广为流传的 二级文件系统 基础上制作的.重新编写了块操作等模块,修正了N多BUG. 实现的命令有 ls-列目录 md-创建目录 cd-进入子目录 mf-创建文件 cat-显示文件内
💻 C
字号:
#include <stdio.h>
#include "filesys.h"

static unsigned int block_buf[BLOCKSIZ/sizeof(int)];
unsigned int balloc()
{
  unsigned int free_block,free_block_num;
  int i,j;
  
  if(filsys.s_nfree==0)
  {
      printf("\nDisk Full!!!\n");
      return  DISKFULL;
  };
/*      fseek(fd,filsys.s_hblock.hb_cur,SEEK_SET);
      fwrite(&filsys.s_hblock,1,sizeof(struct hblock),fd);
      fseek(fd,filsys.s_hblock.hb_fowd,SEEK_SET);
      fread(&filsys.s_hblock,1,sizeof(struct hblock),fd);
      
   for (i = 0; i < NICFREE-1; ++i) {
       printf("[%d],", filsys.s_hblock.hb_fblock[i]);
   }
   printf("\n");
   for (i = 0; i < NICFREE-1; ++i) {
       printf("[%d],", filsys.s_hblock.hb_bmap[i]);
   }
   getch();*/

   free_block = filsys.s_hblock.hb_fblock[filsys.s_hblock.hb_pblock];
   filsys.s_hblock.hb_bmap[filsys.s_hblock.hb_pblock] = 1;
   if(filsys.s_hblock.hb_size == 1)
   {
      printf("CHANGE GROUP~\n");
      getch();
      fseek(fd,filsys.s_hblock.hb_cur,SEEK_SET);
      fwrite(&filsys.s_hblock,1,sizeof(struct hblock),fd);
      fseek(fd,filsys.s_hblock.hb_fowd,SEEK_SET);
      fread(&filsys.s_hblock,1,sizeof(struct hblock),fd);
      
   for (i = 0; i < NICFREE-1; ++i) {
       printf("[%d],", filsys.s_hblock.hb_fblock[i]);
   }
   printf("\n");
   for (i = 0; i < NICFREE-1; ++i) {
       printf("[%d],", filsys.s_hblock.hb_bmap[i]);
   }

   }   
   else {
       for (j = 0; j < NICFREE-1; ++j) {
           //printf("<%d,%d>", j, filsys.s_hblock.hb_bmap[j]);
           if (filsys.s_hblock.hb_bmap[j] == 0) {
               filsys.s_hblock.hb_pblock = j;
               break;
           }
       }        
           
       //filsys.s_hblock.hb_pblock++;
       //printf("%d\n", filsys.s_hblock.hb_pblock);
       filsys.s_hblock.hb_size--;
   }
    
   filsys.s_nfree--;
   filsys.s_fmod=SUPDATE;
   printf("Balloc %d block, total free %d block, group free %d block\n", free_block, filsys.s_nfree, filsys.s_hblock.hb_size);
   return free_block;
 }

 bfree(block_num)
 unsigned int block_num;
 {
   int i,j;
   if(filsys.s_hblock.hb_size == NICFREE-1)    /* s-free full */
   {
    printf("bfree CHANGE GROUP~\n"); 
    fseek(fd,filsys.s_hblock.hb_cur,SEEK_SET); 
    fwrite(&filsys.s_hblock,1,sizeof(struct hblock),fd);
    fseek(fd,filsys.s_hblock.hb_back,SEEK_SET); 
    fread(&filsys.s_hblock,1,sizeof(struct hblock),fd);
   }
   
   for (j = 0; j < NICFREE-1; ++j) {
      if ( filsys.s_hblock.hb_bmap[j] == 1 ) {
               filsys.s_hblock.hb_fblock[j] = block_num;
               filsys.s_hblock.hb_bmap[j] = 0;
               filsys.s_hblock.hb_pblock = j;
               filsys.s_hblock.hb_size++;
               break;
      }
   }
   filsys.s_nfree++;
   filsys.s_fmod=SUPDATE;
   printf("BFree %d block, total free %d block\n", block_num, filsys.s_nfree);
 }

⌨️ 快捷键说明

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