文件系统代码有哪些呢?
文件系统代码有哪些呢?
文件系统代码编辑下面是文件系统的代码,根据这个代码我们可以更好地了解文件系统的工作流程main。cpp#include"blockinodesuperblock。h"//intmain(){control。open("control。txt",ios::in|ios::out|ios::nocreate);inti;controli;control。
close();if(i!0)//不为0就初始化{initial();}control。open("control。txt",ios::in|ios::out|ios::nocreate);control。seekp(0);control0;//默认是上次基础上继续下去不用再初始化control。
close();strcpy(curname,"root");//当前文件名为rootroad[0]0;//当前路径(存放从根到这里的结点号)num1;//最后位road[num1]为当前文件i结点号cout"请登陆系统\n";while(!login())//登陆为止cout"wrong!!!\n";cout"loginsuccess"endl;cout"******Welcome"auser"******";readsuper();getcommand();//命令解析函数writesuper();return0;}blockinodesuperblock。
hintialloc()//申请一个i结点返回结点号否则返回1{if(superblock。fiptr0){inttempsuperblock。fistack[80superblock。fiptr];//当前可用superblock。fistack[80superblock。
fiptr]1;superblock。fiptr;returntemp;}return1;}//voidifree(intindex)//指定一个结点号,回收一个i结点{disk。open("disk。txt",ios::in|ios::out|ios::nocreate);//清空结点disk。
seekp(514+64*index+2*(index/8));disksetw(64)'';disk。close();for(inti80superblock。fiptr;i80;i++)//结点号找到合适位置插入空闲结点号栈{if(superblock。
fistackindex)//小于它的前移一位{superblock。fistack[i1]superblock。fistack;}else//放在第一个大于它的结点号前面{superblock。fistack[i1]index;break;}}superblock。
fiptr++;}///*成组链接法*/intballoc()//申请一个盘块返回盘块号否则返回1{inttempsuperblock。fbstack[10superblock。fbptr];if(superblock。fbptr1)//是栈底了;是记录盘块了{//是最后记录盘块最后号0(保留作栈底分配不成功)if(temp0){return1;}suprblock。
fbstack[10superblock。fbptr]1;superblock。fbptr0;//盘块内容读入栈for(inti0;i10;i++){intid,num0;disk。open("disk。txt",ios::in|ios::out|ios::nocreate);//先计算盘块内容个数num(最多10),最后盘块可能不到10个disk。
seekg(514*temp);for(inti0;i10;i++){diskid;num++;if(id0)break;}disk。seekg(514*temp);//盘块内容读入栈for(intj10num;j10;j++){diskid;superblock。
fbstack[j]id;}superblock。fbptrnum;disk。close();}disk。open("disk。txt",ios::in|ios::out|ios::nocreate);//清空回收盘块disk。seekp(514*temp);disksetw(512)'';disk。
close();//盘块使用掉returntemp;}else//不是记录盘块;盘块使用掉{superblock。fbstack[10superblock。fbptr]1;superblock。fbptr;returntemp;}}//文件系统FAT编辑在Win9X下,FAT16支持的分区最大为2GB。
答:详情>>