计算机操作系统上机实验报告(含测试运行结果).docx_第1页
计算机操作系统上机实验报告(含测试运行结果).docx_第2页
计算机操作系统上机实验报告(含测试运行结果).docx_第3页
计算机操作系统上机实验报告(含测试运行结果).docx_第4页
计算机操作系统上机实验报告(含测试运行结果).docx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程名称: 学生姓名: 学 号: 所在学院: 专 业: 指导教师:计算机操作系统课程设计(上机实验)报告李凌锋1402120120电子与信息工程学院电子与信息工程吴军华2014年11月20日4.修改del等命令,使其可以使用统配符*在经过前面几题的练习后对整个程序已经有了一定的了解,最后一个功能的修改基本是自己完成 的。添加的程序段主要是通过判断命令中是否有来决定是否执行添加的功能。以下是添加的程序 段。/增加的程序段 if(comdl0='*')(sl=curpath.fblock; 当前目录的首块号保存于siwhile (sl>0)(p=(FCB*)Disksl;p指

2、向该目录的第一个盘块for (j=0;j<4;j+,p+) (ch=p->FileNameO;取文件(B录)名的第一个字符if (ch=(char)0xe5) 空目录项continue;if(ch=,0) 己至目录尾部break;if (p->Fattrib>=,20,) 是子目录continue;else (/teststartFileName=p->FileName;传递文件名sO=sl;s=FindFCB(FileName,sO,attrib,fcbp);取 FileName 的首块号(查其存在性)if (s<0)(cout«nn要删除的文件

3、不存在。n”; return -2;strcpy(gFileName,temppath); i=strlen(temppath);if (temppathi-l!=7) strcat(gFileName/7n);strcat(gFileName,FileName); /构造文件的全路径名 i=Check_UOF(gFileName); 查 UOFif (i<S)该文件已在UOF中(cout«nn文件,«gFileName«n正在使用,不能删除!n”; return -3;)attr=fcbp->Fattrib & '01'if(

4、attr=,01,)( cout«"n文件n«gFileName«n是只读文件,你确定要删除它吗?(y/n) cin»yn;if(yn!=Y && yn!=y) continue;不删除继续)i=PutUdtab(fcbp);被删除文件的有关信息保存到udtab表中if(i<0)因磁盘空间不足,不能保存被删除文件的信息cout«nn 你是否仍要删除文件 n«gFileName«n ? (y/n): ”; cin»yn;if(yn=N|yn='n') continue;

5、不删除继续fcbp->FileName0=(char) 0xe5; 删除目录项 while (s>0)回收磁盘空间sO=s;s=FATs;FATs0=0; FAT0+;)/testendcout«gFileName«,' ''"deleted nn;filecount+;)if (ch='0)break; sl=FATsl; 指向该目录的下一个盘块cout«filecount«n n«n file(s)n«H u«ndeletedn;return 1;)/增加的程序段(注

6、:完整指令流程图分为删除指定文件和删除所有文件,此处流程图只画出删除所有文 件即新增程序段的流程图)显示相关信息课程设计小结:本次实验让我对计算机操作系统的文件管理有了进一步的认识,阅读分析程序以及编 写程序的能力和耐心也有了一定的提高。最开始时我想将程序全部看懂再去修改或增加指令,但面对几千行的代码看了很久也 没有什么头绪,后来直接开始操作,根据实验要求去一段段地分析参考程序,遇到不明白 的函数再转到对应定义中去看。完成四个实验要求后对整个程序也己经认识得差不多了。 由此我明白了看程序要一步步得分析,而不能希望一下全部弄懂。以下是我在完成实验时遇到的一个小问题以及一些自己的想法。在修改md指

7、令之前我一直有个疑问,就是源程序中已经有了处理目录属性的程序段, 但为什么不能正确执行,老师为什么还要我们去添加这个功能。if(k=2) 命令形式:md 目录名|v属性符(i=GetAttrib(comd2,attrib);if (i0)return i;后来在同学的提醒下我发现是调用的GetAttrib函数的原因。分析GetAttrib函数后我觉得 这应该是老师给我们设置的障碍,也是修改这条指令的关键,稍做修改就能完善功能。而 这么修改也比我原来的方法简单。md指令修改这个实验是让我们添加目录属性处理的功 能,可原来的程序中已经有了处理目录属性的程序段,只是因为某些语句使得处理程序无 法调用

8、,我觉得如果没有GeyAttrib函数或者要求我们不用该函数另外编写代码可能更好 一点。程序运行结果1 .修改创建子目录的Did命令 现在你可以输入各种操作命令.Help 简易帮助信息.exit退出本程序.C:/>md aaa rC:/>attrib aaa/aaa的属性是:RC:/>2 .修改copy命令 现在你可以输入各种操作命令.Help 简易帮助信息. exit退出本程序.C:/>dirbinusrautodev boy abcmap maptest qil_nanjbinusrautodev boy abcmap maptest qil_nanjThe Dir

9、ectory of C:/<DIR><DIR>0<DIR>17020376772256 file(s)751 bytes3 dir (s)313600 freeC:/>copy boy 根目录无父目录!C:/dev>dirThe Directory of C:/dev.<DIR>abc981 file(s)98 bytes1 dir (s)313600 freeC:/dev>open abc文件/dev/abc打开成功。C:/dev>read abcABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890

10、南京工业大学信息学院计算机科学与技术系. 浦江学院计算机专业。C:/dev>close abc关闭文件/dev/abc成功。C:/dev>copy abcC:/dev>cdC:/>dirbinusrautodevboyabc mapmaptest qil_nanj abcbinusrautodevboyabc mapmaptest qil_nanj abcThe Directory of C:/<DIR><DIR>0<DIR>1702037677225987 file(s)849 bytes3 dir(s) 313472 free文件

11、/abc打开成功。ABCDEFGHIJKLMN0PQRSTUVWXYZ1234567890 南京工业大学信息学院计算机科学与技术系. 浦江学院计算机专业。C:/>新增fc命令,实现两个文件的比较现在你可以输入各种操作命令.Help 简易帮助信息.exit退出本程序.C:/>dirbinusr auto dev boy<DIR><DIR><DIR>maptest17020376772256 file(s)3 dir (s)313600 freeC:/>open boy文件/boy打开成功。C:/>open map文件/map打开成功。C

12、:/>read boyHello boy.Welcome to Nanjing University of Technology.Welcome to School of Infomation Science and Engineering. Welcome to Department of Computer Science and Technology.C:/>read mapAA AA AA AA A A A AAAAAC:/>close boy关闭文件/boy成功。C:/>close map关闭文件/map成功。C:/>fc boy map文件boy长度为:

13、170文件map长度为:76第一个不同字节的位置为第1个字节此时两个文件的字符分别为H和C:/>3. 修改del等命令,使其可以使用统配符*现在你可以输入各种操作命令.Help 简易帮助信息.exit退出本程序.C:/>cd devC:/dev>dirThe Directory of C:/dev<DIR>98abc1 file(s)98 bytes1 dir (s)313600 freeC:/dev>del */dev/abc deleted1 file (s) deletedC:/dev>dirThe Directory of C:/dev.<

14、;DIR>0 file(s)0 bytes1 dir (s)313664 freeC:/dev>课程设计(上机实验)题目:修改或增加操作系统程序指令实验目的:理解操作系统文件系统的某些工作原理,学习文件操作命令的设计方法。通过实验, 使学生加深对操作系统文件系统某些问题的理解,归纳学习方法和思考方法,做到理论 联系实际。培养学生分析问题、解决问题的能力,提高学生软件设计能力和逻辑思维能 力。实验任务:1. 修改创建子目录的md命令修改copy命令2. 新增fc命令,实现两个文件的比较修改del等命令,使其可以使用统配符*内容和要求:在此次实验过程中,具体的实验内容如下:1. 修改创

15、建子目录的md命令修改md命令,增加“属性”参数,用于创建指定属性的子目录。命令形式如下: md目录名 属性属性包括R、II、S以及它们的组合(不区分大小写,顺序也不限)。例如:md user rh其功能是在当前目录中创建具有“只读”和“隐藏”属性的子目录usero2.修改copy命令参考程序中的copy命令不能处理如下情况:假设当前目录是/usr,执行如下命令之一 copy boy /copy boy 上述2条命令应该是将当前目录/usr中的文件boy复制到其父目录(根目录)中,文件名仍 为boy。但系统不能正确执行,而显示“目标文件名错误”的信息。正确的功能应该是:若当前目录中不存在文件b

16、oy,则报错;第2个命令若当前目录是根目录,因根目录没有父目录,故应报错;若当前目录的父目录中己经存在名为boy的文件,也报错(或询问用户是否覆盖)。其他情况上述命令都应能正确执行。请按此要求修改copy命令处理程序,使之在上述命令形式也能正确执行。3.新增fc命令,实现两个文件的比较命令形式:fc文件名1文件名2 命令功能:逐个字节比较指定的两个文件,若相同,显示“文件内容相同”字样;若不 同,显示第一个不同字节的位置和各自的内容。若文件不存在则报错。4.修改del等命令,使其可以使用统配符*del *del *删除当前目录中的所有文件实验具体操作:1.修改创建子目录的md命令修改md指令我

17、用了两种方法(为了保证程序能正确执行其中一种方法已经注释掉 T)o第一种方法是像文件创建函数那样直接处理属性参数而不调用GetAttib,这样也可 以排除GetAttib的影响。第二种直接修改GetAttib指令,由于原来的GetAttib指令规定输入的第二个参数 首字节不是 1则报错,所以注释掉对应部分,并设置从strO开始分析即可。第一种方法是我独立完成的。在修改这条指令之前我注意到文件创建的指令中可以 有属性参数,因此我参考了 CreateComd即create命令处理函数中处理文件属性的部分 内容对md指令进行了修改。以下为该方法所需要添加的程序段。(在添加属性处理的程 序段时需要同时

18、添加一些新的变量)/新加的变量/ short i_uof:/ char gFileName PATH_LEN; 存放文件全路径名/ char ch,*q;/创建文件处理属性的方法重新定义一些变量移植到目录属性的处理程序/* if (k=2)q=comd2;while (*q!='0)/处理文件属性ch=*q; ch=tolower(ch); switch(ch)case 'M : attrib二attrib | (char) 1: break;case ' h' : attrib=attrib | (char) 2; break;case 's'

19、 : attrib二attrib | (char) 4;break;default : cout<<z/n输入的文件属性错误。n;return -3;q+;第二种方法是在同学提醒我修改GetAttrib函数才实现的。具体操作是将以下程序段去除,并使for循环中的i从0开始,即最先读取的是命令中第二个参数的第一个字符。/* if (str 0 !=,coutn命令中属性参数错误return -1:在提交的源程序中我采用的是第二种方法。2. 修改copy命令对于这条指令的修改,我主要是与同学合作完成的。以下是添加的主要程序段,新增 变量的声明和一些细节没有列出。if(strcmp(te

20、mppath/7n)=0&&s02=5001)(s2=l;else if(strcmp(templ,".”)=O)s2=FindPath(”.”,a,fcbp3); 找指定目录(的首块号),源文件的父目录的首块号if(s2=-l)cout«n根目录无父目录! "vvendl;/如果当前目录为根目录FindPath返回本程序段的主要功能是找到源文件的父目录的首块号,如果此目录是根目录则返回对 应的错误信息。是否为根目录是根据FindPath函数的返回值来判断的。(注:因为版面问题流程图中向父目录复制文件的具体步骤省略)显示“源文件不存在。显示“源文件

21、不存在。显示“命令中参 数太多或太少”新增fc命令,实现两个文件的比较该部分内容主要流程是自己思考,但由于能力有限,部分功能的具体实现是与同学讨论得出的, 程序的源代码如下。int FcComd(int k)if(k!=2)(cout«H出错:输入命令格式错误,请重新输入n«endl;return false;)short int i,j=0,sl,s2,sizel,size2,s,s3;char attrib='O',*FileName,*FileName'Buffer l,Buffer2;FCB* fcbp ,*fcbpl,*fcbp2 ; s=

22、ProcessPath(comd 1 ,FileName,k,0/20');/取 FileName 所在目录的首块号 if(s<l)路径错误return s;/失败,返回sl=FindFCB(FileName,s,attrib,fcbp);取 FileName 的首块号(查其存在性)fcbp 1 二fcbp;if(sl<0)(cout«nn要比较的文件不存在。n" return -1; s3=ProcessPath(comd2,FileNamel,k,020');取 FileName 1 所在目录的首块号 if(s3<l)路径错误retur

23、n s3;失败,返回s2=FindFCB(FileNamel,s3;40fcbp);取 FileName 的首块号(查其存在性)fcbp2=fcbp;if (s2<0)(cout«nn要比较的文件不存在。nH;return -2;size 1 =fcbp l->Fsize;取文件一的长度size2=fcbp2>Fsize;取文件二的长度if(size 1 =0&&size2|size2=0&&size 1)cout«"两个文件的长度不同:"«endl;cout«n 文件 n«fc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论