操作系统上机实验代码.doc

上传人:laozhun 文档编号:2385972 上传时间:2023-02-17 格式:DOC 页数:12 大小:41.50KB
返回 下载 相关 举报
操作系统上机实验代码.doc_第1页
第1页 / 共12页
操作系统上机实验代码.doc_第2页
第2页 / 共12页
操作系统上机实验代码.doc_第3页
第3页 / 共12页
操作系统上机实验代码.doc_第4页
第4页 / 共12页
操作系统上机实验代码.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《操作系统上机实验代码.doc》由会员分享,可在线阅读,更多相关《操作系统上机实验代码.doc(12页珍藏版)》请在三一办公上搜索。

1、修改后的md命令程序:int MdComd(int k)/md命令处理函数/ 命令形式:md / 功能:在指定路径下创建指定目录,若没有指定路径,则在当前目录下创建指定目录。/ 对于重名目录给出错误信息。目录与文件也不能重名。/ 学生可以考虑命令中加“属性”参数,用于创建指定属性的子目录。命令形式如下:/md / 属性包括R、H、S以及它们的组合(不区分大小写,顺序也不限)。例如:/md user rh/ 其功能是在当前目录中创建具有“只读”和“隐藏”属性的子目录user。short i,s,s0,kk;char attrib=(char)16,*DirName;FCB *p; char st

2、r20=|;kk=SIZE/sizeof(FCB);if (k1)cout2)coutn错误:命令参数太多。n;return -1;s=ProcessPath(comd1,DirName,k,0,attrib);if (s0)return s;/失败,返回if (!IsName(DirName)/若名字不符合规则cout0)coutn错误:目录重名!n;return -1;if (k=2)/命令形式:md i=GetAttrib(strcat(str,comd2),attrib);/由i=GetAttrib(comd2,attrib);if (i0)return i;s0=FindBlankF

3、CB(s,p);/找空白目录项if (s00)/磁盘满return s0;s0=M_NewDir(DirName,p,s,attrib);/在p所指位置创建一新子目录项if (s00)/创建失败coutn磁盘空间已满,创建目录失败。n;return -1;return 1;/新目录创建成功,返回/修改后的Help命令程序代码:void HelpComd()/help命令,帮助信息(显示各命令格式)int i=1; /用来选择需要查看的命令的序号coutn* * * * * * * 本系统主要的文件操作命令简述如下 * * * * * * * *nn;cout0、退出帮助 t;cout1、cre

4、ate t;cout2、open t;cout3、write n;cout4、read t;cout5、close t;cout6、del t;cout7、dir n;cout8、cd t;cout9、md t;cout10、rd t;cout11、ren n;cout12、attrib t;cout13、copy t;cout14、type t;cout15、rewind n;cout16、fseek t;cout17、block t;cout18、closeall t;cout19、uof n;cout20、undel t;cout21、exit t;cout22、prompt t;cou

5、t23、fat n;cout24、check t;cout25、fc t;cout26、batch n;docouti;switch(i)case 0:break;case 1:coutcreate 创建新文件,文件属性是r、h或s。n;break;case 2:coutopen 打开文件,操作类型可为r、h或(与)s。n;break;case 3:coutwrite insert 在指定位置写文件(有插入功能)。n;break;case 4:coutread 读文件,从第m字节处读n个字节。n;break;case 5:coutclose 关闭文件。n;break;case 6:coutde

6、l 撤消(删除)文件。n;break;case 7:coutdir | 显示当前目录。n;break;case 8:coutcd 改变当前目录。n;break;case 9:coutmd 创建指定目录。n;break;case 10:coutrd 删除指定目录。n;break;case 11:coutren 文件更名。n;break;case 12:coutattrib 修改文件属性(r、h、s)。n;break;case 13:coutcopy 复制文件。n;break;case 14:couttype 显示文件内容。n;break;case 15:coutrewind 将读、写指针移到文件

7、第一个字符处。n;break;case 16:coutfseek 将读、写指针都移到指定位置。n;break;case 17:coutblock 显示文件占用的盘块号。n;break;case 18:coutcloseall 关闭当前打开的所有文件。n;break;case 19:coutuof 显示UOF(用户打开文件表)。n;break;case 20:coutundel 恢复指定目录中被删除的文件。n;break;case 21:coutexit 退出本程序。n;break;case 22:coutprompt 提示符是否显示当前目录(切换)。n;break;case 23:coutfa

8、t 显示FAT表中空闲盘块数(0的个数)。n;break;case 24:coutcheck 核对后显示FAT表中空闲盘块数。n;break;case 25:coutfc 逐个字节比较指定的两个文件。n;break;case 26:coutbatch 从模拟盘目录中逐行读入命令行执行。n;break;default:coutn对不起,你的输入有误!请重新输入:n;while(i);/新增的Fc命令的程序:int FcComd(int k)short i,s1,s2,size1,size2,jj=0,count=0;char attrib=0;char *FileName1, *FileName

9、2; /保存参数的两个文件名char gFileName1PATH_LEN, gFileName2PATH_LEN;/存放文件全路径名FCB *fcbp1,*fcbp2;if(k!=2)coutn命令中参数个数不对。本命令必须有两个参数。n;return -1;s1=ProcessPath(comd1,FileName1,k,0,020);/取FileName1所在目录的首块号if (s11)/路径错误return s1;/失败,返回s1=FindFCB(FileName1,s1,attrib,fcbp1);/取FileName1的首块号(查其存在性)strcpy(gFileName1,tem

10、ppath);i=strlen(temppath);if (temppathi-1!=/)strcat(gFileName1,/);strcat(gFileName1,FileName1);/构造文件的全路径名if (s10)coutn文件gFileName1不存在。n;return -3;if (s1=0)coutn文件gFileName1是空文件n;count+;s2=ProcessPath(comd2,FileName2,k,0,020);/取FileName2所在目录的首块号if (s21)/路径错误return s2;/失败,返回s2=FindFCB(FileName2,s2,att

11、rib,fcbp2);/取FileName2的首块号(查其存在性)strcpy(gFileName2,temppath);i=strlen(temppath);if (temppathi-1!=/)strcat(gFileName2,/);strcat(gFileName2,FileName2);/构造文件的全路径名if (s20)coutn文件gFileName2不存在。n;return -3;if (s2=0)coutn文件gFileName2Fsize;size2=fcbp2-Fsize;if(size1!=size2)/文件大小不一样cout文件FileName1与文件FileName

12、2长度不一样!n;coutFileName1的长度为:size1个字符endl;coutFileName2的长度为:size2个字符0&s20)for (i=0;iSIZE;i+,jj+)if(jj=size)break;if(Disks1i!=Disks2i)/字符不一样cout不同处:endl;coutFileName1的第i+1个字符:Disks1iendl;coutFileName2的第i+1个字符:Disks2iendl;return 1; if(isize)break;s1=FATs1;s2=FATs2;cout文件完全相同endl;return 1;/新增batch命令的程序代码

13、:int BatchComd(int k) short i,s,size,jj=0,x=0, y=0;char attrib=0,*FileName;char gFileNamePATH_LEN;/存放文件全路径名FCB* fcbp;if(k!=1)coutn命令参数中应该只有一个文件名。n;return -1; else s=ProcessPath(comd1,FileName,k,0,020);/取FileName所在目录的首块号if (s1)/路径错误return s;/失败,返回 s=FindFCB(FileName,s,attrib,fcbp);/取FileName的首块号(查其存在

14、性)strcpy(gFileName,temppath);i=strlen(temppath);if (temppathi-1!=/)strcat(gFileName,/);strcat(gFileName,FileName);/构造文件的全路径名if (s0)coutn文件gFileName不存在。n;return -3;if (s=0)coutn文件gFileNameFsize;char Buffer10050;/分配动态内存空间while (s0)for (i=0;iSIZE;i+,jj+)if (jj=size)break; if(Disksi=n) Bufferxy=0; coutB

15、ufferxendl; x+; y=0; else Bufferxy=Disksi; y+; if (iSIZE)Bufferxy=0;break;s=FATs; for(i=0;i=x;i+) coutnC:;/显示提示符(本系统总假定是C盘)if (dspath)coutcurpath.cpath;cout; coutBufferiendl; k=ParseCommand(Bufferi);/分解命令及其参数/comd0中是命令,comd1,comd2.是参数 ExecComd(k);/执行命令 return 1;/int CopyComd(int k)/copy命令的处理函数:复制文件

16、short int i,size,s01,s02,s1,s2,s22,b,b0,bnum;char attrib=0,*FileName1,*FileName2;char gFileNamePATH_LEN;/存放文件全路径名FCB *fcbp,*fcbp1,*fcbp2;if (k2)coutn命令中参数太多或太少。n;return -1;s01=ProcessPath(comd1,FileName1,k,0,20);/取FileName所在目录的首块号if (s011)/路径错误return s01;/失败,返回s1=FindFCB(FileName1,s01,attrib,fcbp);/

17、取FileName(源文件)的首块号(查其存在性)if (s10)coutn要复制的文件不存在。n;return -1;fcbp1=fcbp;/记下源文件目录项指针值strcpy(gFileName,temppath);i=strlen(temppath);if (temppathi-1!=/)strcat(gFileName,/);strcat(gFileName,FileName1);/构造文件的全路径名i=Check_UOF(gFileName);/查UOFif (iS)/该文件已在UOF中coutn文件gFileName已经打开,不能复制!n;return -2;if (k=1)/命令

18、中无目标文件,同名复制到当前目录s02=curpath.fblock;/取当前目录的首块号FileName2=FileName1;else/k=2(命令中提供目标文件)的情况 /*以下为修改的部分*/用来判断第二个参数是否为“.” if(!strcmp(comd2, .)int s=FindPath(comd2,(char)16,1,fcbp);/找指定目录(的首块号)if (s1)coutn路径名错误!endl;return -1;strcpy(comd2, temppath); /用来判断第二个参数是否为“/”if(!strcmp(comd2, /)strcat(comd2, FileNa

19、me1);s02=ProcessPath(comd2,FileName2,k,0,20);/取FileName2所在目录的首块号if (s021)/目标路径错误return s02; /*以上为修改的部分*/ if (!IsName(FileName2)/若名字不符合规则cout=0 & fcbp-Fattrib=07)/存在同名目标文件coutn存在文件与目标文件同名。n;return -3;if (s2=0)coutn有同名文件,不能复制。n;return -4;FileName2=FileName1;/缺省目标文件名,同名复制elsecoutn不能同目录同名复制。n;return -5;

20、i=FindBlankFCB(s22,fcbp2);if (i0)coutFsize;/源文件的长度bnum=size/SIZE+(short)(size%SIZE0);/计算源文件所占盘块数if (FAT0bnum)coutFileName,FileName2);/写目标文件名b0=0;while (s10)/开始复制文件内容b=getblock();if (b0=0)fcbp2-Addr=b;/目标文件的首块号elseFATb0=b;memcpy(Diskb,Disks1,SIZE);/复制盘块s1=FATs1;/准备复制下一个盘块b0=b;coutn文件复制成功!endl; /文件复制成功return 1; /命令行预处理程序的修改int ParseCommand(char *p)/将输入的命令行分解成命令和参数等int i,j,k,g=0;for (i=0;iCK;i+)/初始化comd comdi0=0;for (k=0;k0)for (j=k;j0;j-)strcpy(comdj+1,comdj);/后移strcpy(comd1,&comd0i);comd0i=0;k+;/多出一个参数return k;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号