}
for (int i=0;i for (int i=0;i act_inode_list[i]=NULL; sys_list[i]=-1; //向虚拟磁盘写文件; void write_disk(FILE *fp) { } //从虚拟磁盘读数据 void read_disk(FILE *fp) { fp =fopen(\,\); for (int i=0;i fread(&superblock,sizeof(class super_block),1,fp); for (int i=0;i fread(inode[i],sizeof(class i_node),1,fp); fread(memory[i],sizeof(class block),1,fp); int i; fp =fopen(\,\); for (int i=0;i fwrite(&superblock,sizeof(class super_block),1,fp); for (int i=0;i fwrite(inode[i],sizeof(class i_node),1,fp); } for (int i=0;i fclose(fp); fwrite(direct[i],sizeof(class dir),1,fp); fwrite(memory[i],sizeof(class block),1,fp); } } for (int i=0;i fclose(fp); fread(direct[i],sizeof(class dir),1,fp); //创建文件 int creat_file(string filename,int cur_dir_id,int mod=0,int style=1) { } int k =direct[i]->i_num; //标志目录项中i节点号 direct[i]->file_name =filename;//标记目录项(文件)名称 direct[i]->p_id =cur_dir_id;//标记当前目录(文件)所在目录 inode[k]->file_style=style; //标记file 类型0表示目录1表示文件;//默认为表示创inode[k]->file_length=0;//文件长度 目录项文件长度为0; inode[k]->i_mod=mod; //创建文件是不分配内存,在写文件时候在分配; } for (int i=0;i if (direct[i]->i_num==-1) //表示此目录项位未被使用; { for (int j=0;j if(superblock.i_node_num[j]!=1) { direct[i]->i_num =j; superblock.i_node_num[j]=1; j=DIR_NUM; for (int i=0;i if (direct[i]->p_id==cur_dir_id&&filename == { } cout<<\文件名\< direct[i]->file_name&&inode[direct[i]->i_num]->file_style==style) 建文件 } } } if (cur_dir_id!=-1) { inode[direct[cur_dir_id]->i_num]->file_length++; } return i;//返回创建后文件的目录项的id return -1; //创建目录 int creat_dir(string direct,int cur_dir_id) { } void display_cur_dir(int cur_dir_id) { } //初始化root目录 int init_root() { int cur_dir_id =-1; return creat_dir(\,cur_dir_id); list while (cur_dir_id!=-1&&direct[cur_dir_id]->p_id != -1) { temp.push_front(\+direct[cur_dir_id]->file_name); cur_dir_id=direct[cur_dir_id]->p_id; } temp.push_front(\+direct[cur_dir_id]->file_name); list for( theIterator = temp.begin(); theIterator != temp.end(); theIterator++ ) cout << *theIterator; int dir_id; return dir_id; { } return cur_dir_id; if ((dir_id=creat_file(direct,cur_dir_id,0,0))== -1) } int* allocat(int length) { int *p; } bool recycle(int *p)//要记得修改superblock bat_map 的块的状态.. { } //删除文件 bool del_file(string filename,int cur_dir_id) { for (int i=0;i int k =direct[i]->i_num; int n=p[MAX_FILE_BLOCKS-1]; if (n>10) { } { n=10; } { } superblock.bat_map[p[i]]='0'; memory[p[i]]->data[j]=0; for (int j=0;j<64;j++) } } p= new int[MAX_FILE_BLOCKS]; for (int j=0;j { if (superblock.bat_map[i]=='0') { p[j]=i; superblock.bat_map[i]='1'; i = MEM_NUM; } for (int i=0;i p[MAX_FILE_BLOCKS-1]=length; return p; for (int i=0;i return true; if (filename==direct[i]->file_name&&inode[k]->file_style==1&&direct[i]->p_id==cur_dir_id)//查找filename 的目录项 } cout<<\文件\< //删除目录项 bool del_dir(string dir_name,int cur_dir_id) { for (int i=0;i int k =direct[i]->i_num; if { //判断i节点是不是文件项 //判断找到的目录项是不是当前目录下的文件; } recycle(inode[k]->file_address); //回收i节点占用的盘块 for (int i=0;i ////////////////////////////// inode[k]->file_length=-1; inode[k]->file_style=-1; superblock.i_node_num[k]=0; direct[i]->i_num =-1; ///这一段是恢复当前目录项和磁盘i 节点到初direct[i]->file_name=\; direct[i]->p_id=-1;///////////////////////////// return true; inode[k]->file_address[i]=-1; 始状态 (direct[i]->file_name==dir_name&&inode[k]->file_style==0&&direct[i]->p_id==cur_dir_id)//判断文件名是否匹配和文件类型是否正确; { for (int j=0;j if (i==direct[j]->p_id) { cout<<\删除的目录项\<