} } else
{ i=MA[0]; if(i==1)
printf(\ else
{ printf(\ for(j=2;j<=i;j++)
{ printf(\ \ mark[++No]=MA[j]; } } } }
void display() /*显示分组情况*/ { int i,j;
if(MA[0]!=0) display1(); else
{ i=MA[1];
for(j=0;j<=3;j++) MA[j]=A[i][j]; display1(); } }
void assign() /*分配空闲块*/ { int s,i;
if(MA[0]>1) /*若该组不止一个空闲块*/ { i=MA[0]; s=MA[i]; MA[0]--;
printf(\ }
else if(MA[0]==1) /*只剩一个空闲块*/
{ if(MA[1]!=0) /*还有其它空闲块组*/ { s=MA[1];
for(i=0;i<=3;i++) A[0][i]=A[s][i]; MA[0]--;
printf(\
}
else /*没有其它空闲块组*/ { printf(\ return; } }
else /*当前组已分配完*/ { for(i=0;i<=3;i++) MA[i]=A[0][i]; assign(); }
display(); /*显示分组情况*/ }
void callback() /*回收空闲块*/ { int i,j,temp;
printf(\ scanf(\
getchar(); /*得到待回收的空闲块号*/ for(temp=1;temp<=No;temp++) { if(mark[temp]==j) break; }
if(temp if(MA[0]<3) /*当前组不满3块*/ { i=MA[0]; MA[i+1]=j; MA[0]++; } else /*已有3块*/ { for(i=0;i<=3;i++) A[j][i]=MA[i]; MA[0]=1; MA[1]=j; } display(); /*显示*/ } int filecontrol(); void menu() /*功能选择函数*/ { int choice; char judge; printf(\文件管理空间管理\\n\ printf(\ scanf(\ getchar(); if(choice==1) assign(); else if(choice==2) callback(); else if(choice==3) filecontrol(); else printf(\ printf(\ scanf(\ getchar(); if(judge=='y') menu(); else { printf(\ display(); printf(\ getchar(); } } void chengzulink() { int i; for(i=0;i<=3;i++) MA[i]=A[0][i]; display(); menu(); } int filecontrol() //主函数 { int i, j=0,p,len=0; char tmp[10],com[10],tmp1[10],k; struct command tmp2[10]; FILE *fp; help(); strcpy(cmd[0].com,\ //将各个命令存进命令表 strcpy(cmd[1].com,\ strcpy(cmd[2].com,\ strcpy(cmd[3].com,\ strcpy(cmd[4].com,\ strcpy(cmd[5].com,\ strcpy(cmd[6].com,\ strcpy(cmd[7].com,\ strcpy(cmd[8].com,\ strcpy(cmd[9].com,\ strcpy(cmd[10].com,\ strcpy(cmd[11].com,\ strcpy(cmd[12].com,\ if((fp=fopen(\ //判断系统文件是否存在 { printf(\ printf(\ Y / N \\n\ scanf(\ if(k=='y') format(); } else { read_file(fp); //读取系统文件的内容 } while(1) { j=0; //必须重新给恢复0否则出错 strcpy(tmp,cur_dir); while(strcmp(tmp,\ { for(i=0;i<640;i++) { p=root[i].i_num; if(strcmp(tmp,root[i].file_name)==0 && (i_node[p].file_style==0)) { strcpy(tmp2[j].com,tmp); j++; strcpy(tmp,root[i].dir_name); } } } strcpy(tmp2[j].com,tmp); for(i=j;i>=0;i--) { printf(\ } scanf(\ //输入命令并且查找命令的相关操作 for(i=0;i<13;i++) { if(strcmp(com,cmd[i].com)==0) { p=i; break; } } if(i==13) //如果没有这个语句以后输入的命令都和第一次输入的效果一样 { p=14; //随便的一个值 } switch(p) { case 0: format(); //初始化 break; case 1: display_curdir(); //查看当前目录下的文件列表 break; case 2: scanf(\ //查看文件 open_file(tmp); break; case 3: display_sys(); //查看系统信息 break; case 4:scanf(\ //创建目录 create_dir(tmp); break; case 5: scanf(\ //创建文件 scanf(\ create_file(tmp,len); break; case 6: scanf(\ //删除文件 for(i=0;i<640;i++) //判断文件是不是正规文件 { j=root[i].i_num; if(strcmp(tmp,root[i].file_name)==0 && (i_node[j].file_style)==1) { del_file(tmp); break; } } if(i==640) { printf(\这个不是正规文件文件\\n\ } break; case 7: scanf(\ //删除目录 del_dir(tmp); break; case 8: scanf(\ //进入当前目录下的指定目录 相当于进入目录 cd + 目录名 display_dir(tmp1); break; case 9: back_dir(); //返回上一级目录 break; case 10:help(); break; case 11:write_file(fp); //将磁盘利用信息写进系统文件,退出 return 0; case 12: chengzulink(); break; default:printf(\,没有这个命令\\n\ break; } } } int main() { int i; printf(\操作系统课程设计\\n\ printf(\请输入选择\\n\ printf(\ 2 stand for chnegzu control)\\n\ scanf(\ if(i==1) filecontrol(); else if(i==2) chengzulink(); else ; return 0; }