i_node[i].file_address[j]=physic[j]; }
break; } } }
void create_dir(char filename[]) //创建目录 {
style=0; //0代表文件类型是目录文件 create_file(filename,4);
style=1; //用完恢复初值,因为全局变量,否则 }
void del_file(char filename[]) //删除文件 {
int i,j,k;
for(i=0;i<640;i++) {
if(strcmp(filename,root[i].file_name)==0) {
k=root[i].i_num;
for(j=0;j physic[j]=i_node[k].file_address[j]; } callback(i_node[k].file_length); //调用 回收函数 for(j=0;j<100;j++) //删除文件后要将文件属性和目录项的各个值恢复初值 { i_node[k].file_address[j]=-1; //地址恢复初值 } strcpy(root[i].file_name,\ //文件名恢复初值 root[i].i_num=-1; //目录项的I结点信息恢复初值 strcpy(root[i].dir_name,\ //目录项的文件目录信息恢复初值 i_node[k].file_length=-1; //文件长度恢复 i_node[k].file_style=-1; //文件类型恢复初值 break; } } if(i==640) { printf(\不存在这个文件\\n\ } } void del_dir(char filename[]) //删除目录 需要判断目录下时候为空,不为空就不删除 { int i,j,k; for(i=0;i<640;i++) //还要加条件判断要删除的目录是不是当前目录 { k=root[i].i_num; //找到目录名字 if( strcmp(root[i].file_name,filename)==0 && strcmp(cur_dir,filename)!=0 && (i_node[k].file_style)==0 ) { for(j=0;j<640;j++) { if(strcmp(filename,root[j].dir_name)==0) { printf(\目录不为空不能直接删除\\n\ break; } } if(j==640) { del_file(filename); break; } break; } } if(i==640) { printf(\这个不是目录文件 或者不存在这个目录,或者你要删除的是当前目录\\n\ } } void display_curdir() //显示当前目录下的文件列表 { int i,k; printf(\文件名字 文件类型 文件长度 所属目录\\n\ for(i=0;i<640;i++) { if(strcmp(cur_dir,root[i].dir_name)==0) //查询文件中 所在目录信息和当前目录信息相同的数据 { k=root[i].i_num; printf(\ %s\\t\ //文件名 printf(\ //文件的类型 printf(\ //文件的长度 printf(\ //文件所在的目录 } } } void display_dir(char filename[]) //进入指定的目录 { int i,k; for(i=0;i<640;i++) { k=root[i].i_num; //判断文件类型是不是目录类型 if((strcmp(filename,root[i].file_name)==0) && (i_node[k].file_style==0)) { strcpy(cur_dir,filename); //将要进入的指定目录设置为当前目录strcpy(目的,源) break; } } if(i==640) { printf(\没有这个目录\\n\ } } void open_file(char filename[]) //打开文件 { int i,j,k; printf(\文件名字 文件类型 文件长度 所属目录\\n\ for(i=0;i<640;i++) { k=root[i].i_num; if(strcmp(filename,root[i].file_name)==0 && (i_node[k].file_style==1)) { printf(\ %s\\t\ //文件名 printf(\ //文件的类型 printf(\ //文件的长度 printf(\ //文件所在的目录 printf(\文件占用的物理地址\\n\ for(j=0;j printf(\ \文件具体占用的盘块号 } printf(\ 赋值不要反了 break; } } if(i==640) { printf(\没有这个文件 或者这个文件不是正规文件\\n\ } } void back_dir() //返回上一级目录 { int i,k; for(i=0;i<640;i++) //查询和当前目录名相同的目录文件名 { k=root[i].i_num; if(strcmp(cur_dir,root[i].file_name)==0 && (i_node[k].file_style==0)) { strcpy(cur_dir,root[i].dir_name); //将查询到的目录文件名 所在的目录赋值给当前目录 } } } void display_sys() //显示系统信息(磁盘使用情况) { int i,m,k=0; for(i=0;i<20449;i++) { if(memory[i].a==0) k++; } m=20449-k; printf(\空闲的盘块数是:\\t\ printf(\ printf(\使用的盘块数是:\\t\ printf(\} void help() //显示帮助信息 {printf(\以下是文件管理已分配盘块-------------------------------!\\n\ printf(\注意:创建的文件长度 < 100-----------------------------!\\n\说明文件 printf(\初始化-----------------------------------------format!\\n\ printf(\查看当前目录文件列表------------------------------dir!\\n\ printf(\查看文件--------------cat-----(cat + 空格 + 文件名) !\\n\ printf(\查看系统信息-----------------------------------ls !\\n\ printf(\创建目录--------------md------(md + 空格 + 目录名) !\\n\ printf(\创建文件---vi------(vi + 空格 + 文件名 + 文件长度) !\\n\ printf(\删除文件---------------del-----(del + 空格 + 文件名) !\\n\ printf(\删除目录----------------deldir--(del + 空格 + 目录名)!\\n\ printf(\进入当前目录下的指定目录-----cd--(cd + 空格 + 目录名)!\\n\ printf(\返回上一级目录--------------------------------cd.. !\\n\ printf(\显示帮助命令----------------------------------help !\\n\ printf(\退出文件模拟----------------------------------quit !\\n\ printf(\进入成组链接-----------------------------chengzu !\\n\ } int MA[4]; /*空闲块数组*/ int A[9][4]={{3,1,2,3},{3,4,5,6},{0,0,0,0},{0,0,0,0},{3,0,7,8}, {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; /*磁盘空间*/ int mark[9]; /*存放已分配的块*/ int No=0; /*已分配的块数*/ void display1() { int i,j,temp,count; No=0; if(MA[1]!=0) { i=MA[0]; printf(\ for(j=1;j<=i;j++) { printf(\ \ mark[++No]=MA[j]; } temp=MA[1]; count=2; while(A[temp][1]!=0) { printf(\ i=A[temp][0]; for(j=1;j<=i;j++) { printf(\ \ mark[++No]=A[temp][j]; } count++; temp=A[temp][1]; } printf(\ i=A[temp][0]; for(j=2;j<=i+1;j++) if(A[temp][j]>0) { printf(\ \ mark[++No]=A[temp][j];