delete.c

来自「此版本是在网上广为流传的 二级文件系统 基础上制作的.重新编写了块操作等模块,修」· C语言 代码 · 共 52 行

C
52
字号
#include <stdio.h>

#include "filesys.h"

delete(filename)

char *filename;
{
  unsigned int dinodeid,i;
  struct inode *inode;  
  dinodeid=namei(filename);
  printf("\ndinodeid=%d,dir.size=%d\n",dinodeid,dir.size);

  if(dinodeid!=NULL)
          inode=iget(dinodeid);
  else {
      printf(">file not exist!\n");
      return;
  }    


          
  for(i=0;i<dir.size;i++)
      if(dir.direct[i].d_ino==dinodeid) break;
  printf("\ni=%d\n",i);
  i++;

  while(dir.direct[i].d_ino!=NULL)
  {
      strcpy(dir.direct[i-1].d_name,dir.direct[i].d_name);
      dir.direct[i-1].d_ino=dir.direct[i].d_ino;
      i++;
  }

  dir.direct[i-1].d_ino=0;
  dir.size=i-1;
  
  inode->di_number--;
  printf("\ndi_number=%d\n",inode->di_number);
  if ( inode->di_number <= 0 ) {
      for ( i = 0; i < inode->di_size / BLOCKSIZ + (inode->di_size % BLOCKSIZ != 0); ++i) {
          bfree(inode->di_addr[i]);
      }
      ifree(inode);
      return;
  }
  
  iput(inode);
  printf("\ndir.size=%d\n",dir.size);
}

⌨️ 快捷键说明

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