nachos文件系统-实现多级目录

我在实现多级目录的时候是用递归来做的,在创建文件的时候文件名中可能包含有目录

比如创建一个文件 abc/efg ,首先从该字符串中找到第一个目录abc,剩余字符串为 efg。

首先入读根目录,从根目录的目录项中查找abc对应的头结点号。

然后根据该sector num 读取abc文件的内容,由于该文件是一个目录文件,它也保存了一个目录项,再往abc目录文件的目录项中插入该efg文件。


不过在实现的过程中有一些BUG和乱码到现在也还没解决,只好凑合凑合了。

首先文件分为目录和普通文件两类,普通文件用'-' 标示,目录文件用'd'标示


修改DirectoryAdd方法,利用循环遍历

bool Directory::Add(char *name, int newSector, char type,char *filepath)
{ 
   char *p = strchr(name,'/');
   if(p == NULL)
   {  //如果名字中不包含目录
if (FindIndex(name) != -1)
return FALSE;
    for (int i = 0; i < tableSize; i++)
if (!table[i].inUse) {
    table[i].inUse = TRUE;
    strncpy(table[i].name, name, FileNameMaxLen); 
    if(filepath!=NULL)
 	    	strncpy(table[i].path, filepath, PATH_LENGTH); 
    table[i].filetype = type;
    table[i].sector = newSector;
return TRUE;
}
    return FALSE;	// no space.  Fix when we have extensible files.
   }else{
     char path[PATH_LENGTH+1];
     if(filepath!=NULL)  //如果名字中包含目录
 strncpy(path,filepath,PATH_LENGTH); 
     int index = p-name;
     char dname[index+1];
     strncpy(dname,name,index);
     dname[index] = '\0';
     //进入第一个目录 
    int sector = Find(dname); 
     if(sector ==-1) //如果找不到该目录
    {
printf("couldn't find the directory %s\n",dname);
return FALSE;
     } 
 //创建目录文件
     OpenFile* openFile = new OpenFile(sector); 
     Directory *directory1 = new Directory(NumDirEntries);
     directory1->FetchFrom(openFile);
     if(!directory1->Add(p+1,newSector,type,path)) return FALSE;
     directory1->WriteBack(openFile);
     delete directory1;
    return TRUE;
   }     
}

修改Find,List,Print,与Add方法类似,都是用循环递归来做。如果进入的是目录文件,则读取该目录文件,递归调用原方法。



文件系统部分,也只有多级目录这块是自己弄的,其他部分基本都是参考某学长的,估计他的报告大家应该也都是人手一份吧。

幸亏有他,不然这OS的实验都没什么思路,也不知道要费多少时间跟精力来弄。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值