void help() //显示帮助信息
{
printf("注意:创建的文件长度 < 100\n\n"); //说明文件
printf("0.初始化-------------------------format\n");
printf("1.查看当前目录文件列表-----------dir\n");
printf("2.查看文件-----------------------cat-----(cat + 空格 + 文件名) \n");
printf("3.查看系统信息-------------------ls \n");
printf("4.创建目录-----------------------md------(md + 空格 + 目录名) \n");
printf("5.创建文件-----------------------vi------(vi + 空格 + 文件名 + 文件长度) \n");
printf("6.删除文件-----------------------del-----(del + 空格 + 文件名) \n");
printf("7.删除目录-----------------------deldir--(del + 空格 + 目录名)\n");
printf("8.进入当前目录下的指定目录-------cd--------(cd + 空格 + 目录名)\n");
printf("9.返回上一级目录-----------------cd.. \n");
printf("10.显示帮助命令-----------------help \n");
printf("11.退出文件模拟------------------quit \n");
}
void main() //主函数
{
char tmp[10],com[10],tmp1[10],k;
struct command tmp2[10];
int i, j=0,p,len=0;
FILE *fp;
help();
strcpy(cmd[0].com,"format"); //将各个命令存进命令表
strcpy(cmd[1].com,"dir");
strcpy(cmd[2].com,"cat");
strcpy(cmd[3].com,"ls");
strcpy(cmd[4].com,"md");
strcpy(cmd[5].com,"vi");
strcpy(cmd[6].com,"del");
strcpy(cmd[7].com,"deldir");
strcpy(cmd[8].com,"cd");
strcpy(cmd[9].com,"cd..");
strcpy(cmd[10].com,"help");
strcpy(cmd[11].com,"quit");
if((fp=fopen("system","rb"))==NULL) //判断系统文件是否存在
{
printf("can not open file\n");
printf("format the disk Y / N \n");
scanf("%c",&k);
if(k=='y')
format();
}
else
{
read_file(fp); //读取系统文件的内容
}
while(1)
{
j=0; //必须重新给恢复0否则出错
strcpy(tmp,cur_dir);
while(strcmp(tmp,"root")!=0)
{
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("%s/",tmp2[i].com);
}
scanf("%s",com); //输入命令并且查找命令的相关操作
for(i=0;i<12;i++)
{
if(strcmp(com,cmd[i].com)==0)
{
p=i;
break;
}
}
if(i==12) //如果没有这个语句以后输入的命令都和第一次输入的效果一样
{
p=13; //随便的一个值
}
switch(p)
{
case 0: format(); //初始化
break;
case 1: display_curdir(); //查看当前目录下的文件列表
break;
case 2: scanf("%s",tmp); //查看文件
open_file(tmp);
break;
case 3: display_sys(); //查看系统信息
break;
case 4:scanf("%s",tmp); //创建目录
create_dir(tmp);
break;
case 5: scanf("%s",tmp); //创建文件
scanf("%d",&len);
create_file(tmp,len);
break;
case 6: scanf("%s",tmp); //删除文件
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("%s",tmp); //删除目录
del_dir(tmp);
break;
case 8: scanf("%s",tmp1); //进入当前目录下的指定目录 相当于进入目录 cd + 目录名
display_dir(tmp1);
break;
case 9: back_dir(); //返回上一级目录
break;
case 10:help();
break;
case 11:write_file(fp); //将磁盘利用信息写进系统文件,退出
return;
default:printf("SORRY,没有这个命令\n");
break;
}
}
}