当前位置:文档之家› 操作系统任务

操作系统任务

1. 修改help命令的显示方式和显示内容修改HelpComd()函数,使之提供菜单式的较详细的帮助信息。

例如可以先用菜单形式简单列出各命令名称,当用户选择某个命令的序号后,再比较详细地介绍该命令,包括命令的各种形式,每种形式的功能,以及某些举例说明等等。

/***********************修改后的Help命令程序代码:*************************/ void HelpComd() //help命令,帮助信息(显示各命令格式){int i=1; //用来选择需要查看的命令的序号cout<<"\n* * * * * * * 本系统主要的文件操作命令简述如下* * * * * * * *\n\n";cout<<"0、退出帮助\t";cout<<"1、create \t";cout<<"2、open \t";cout<<"3、write \n";cout<<"4、read \t";cout<<"5、close \t";cout<<"6、del \t";cout<<"7、dir \n";cout<<"8、cd \t";cout<<"9、md \t";cout<<"10、rd \t";cout<<"11、ren \n";cout<<"12、attrib \t";cout<<"13、copy \t";cout<<"14、type \t";cout<<"15、rewind \n";cout<<"16、fseek \t";cout<<"17、block \t";cout<<"18、closeall \t";cout<<"19、uof \n";cout<<"20、undel \t";cout<<"21、exit \t";cout<<"22、prompt \t";cout<<"23、fat \n";cout<<"24、check \t";cout<<"25、fc \t";cout<<"26、batch \n";do{cout<<"\n请输入您要查询的命令的序号:";cin>>i;switch(i){case 0:break;case 1:cout<<"create <文件名>[ <文件属性>]--创建新文件,文件属性是r、h或s。

\n";break;case 2:cout<<"open <文件名> --打开文件,操作类型可为r、h或(与)s。

\n";break;case 3:cout<<"write <文件名> [<位置/app>[ insert]] --在指定位置写文件(有插入功能)。

\n";break;case 4:cout<<"read <文件名> [<位置m> [<字节数n>]] --读文件,从第m字节处读n个字节。

\n";break;case 5:cout<<"close [<文件名>]--关闭文件。

\n";break;case 6:cout<<"del <文件名> --撤消(删除)文件。

\n";break;case 7:cout<<"dir [<路径名>] [|<属性>] --显示当前目录。

\n";break;case 8:cout<<"cd [<路径名>] --改变当前目录。

\n";break;case 9:cout<<"md <路径名> [<属性>] --创建指定目录。

\n";break;case 10:cout<<"rd [<路径名>] --删除指定目录。

\n";break;case 11:cout<<"ren <旧文件名> <新文件名> --文件更名。

\n";break;case 12:cout<<"attrib <文件名> [±<属性>] --修改文件属性(r、h、s)。

\n";break;case 13:cout<<"copy <源文件名> [<目标文件名>] --复制文件。

\n";break;case 14:cout<<"type [<文件名>] --显示文件内容。

\n";break;case 15:cout<<"rewind <文件名> --将读、写指针移到文件第一个字符处。

\n";break;case 16:cout<<"fseek <文件名> <位置> --将读、写指针都移到指定位置。

\n";break;case 17:cout<<"block <文件名> --显示文件占用的盘块号。

\n";break;case 18:cout<<"closeall --关闭当前打开的所有文件。

\n";break;case 19:cout<<"uof --显示UOF(用户打开文件表)。

\n";break;case 20:cout<<"undel [<路径名>] --恢复指定目录中被删除的文件。

\n";break;case 21:cout<<"exit --退出本程序。

\n";break;case 22:cout<<"prompt --提示符是否显示当前目录(切换)。

\n";break;case 23:cout<<"fat --显示FAT表中空闲盘块数(0的个数)。

\n";break;case 24:cout<<"check --核对后显示FAT表中空闲盘块数。

\n";break;case 25:cout<<"fc <文件名> <文件名> --逐个字节比较指定的两个文件。

\n";break;default:cout<<"\n对不起,你的输入有误!请重新输入:\n";}}while(i);}/*********************************运行结果***********************************/2.修改命令行预处理程序修改命令行预处理函数ParseCommand( ),使以下命令行(命令与参数间无空格符)可以正确执行:cd/cd..dir/usrcopy/usr/boy mail……即命令名称与后边的“/”或“..”之间不需要空格也能正确执行。

【说明】参考程序已经可以处理类似于“cd/”的形式,但还不能处理“cd..”等形式。

另外,若有输出重定向功能,“>”、“>>”也允许不是用空格分隔符(即允许与其它参数连用)。

例如:type/usr/boy>>/test/****************修改后的ParseCommand命令程序代码:********************/int ParseCommand(char *p) //将输入的命令行分解成命令和参数等{int i,j,k,g=0;for (i=0;i<CK;i++) //初始化comd[][]comd[i][0]='\0';for (k=0;k<CK;k++){ //分解命令及其参数,comd[0]中是命令,comd[1],comd[2]...是参数for (i=0;*p!='\0';i++,p++)if (*p!=' ') //空格是命令、参数之间的分隔符comd[k][i]=*p; //取命令标识符else{comd[k][i]='\0';if (strlen(comd[k])==0) k--;p++;break;}if (*p=='\0'){comd[k][i]=*p;break;}}for (i=0;comd[0][i]!='\0';i++){if (comd[0][i]=='.'||comd[0][i]=='/') //处理cd/,dir/usr等情况break; //comd[0]中存在字符'/' if (comd[0][i]=='.'||comd[0][i]=='/') //处理cd..情况break;}if (comd[0][i]!='\0'){if (k>0)for (j=k;j>0;j--)strcpy(comd[j+1],comd[j]); //后移strcpy(comd[1],&comd[0][i]);comd[0][i]='\0';k++; //多出一个参数}return k;}/*********************************运行结果***********************************/4.3 新增fc命令,实现两个文件的比较命令形式:fc <文件名1> <文件名2>命令功能:逐个字节比较指定的两个文件,若相同,显示“文件内容相同”字样;若不同,显示第一个不同字节的位置和各自的内容。

相关主题