操作系统上机实验报告.docx

上传人:b****1 文档编号:1390150 上传时间:2022-10-21 格式:DOCX 页数:21 大小:288.86KB
下载 相关 举报
操作系统上机实验报告.docx_第1页
第1页 / 共21页
操作系统上机实验报告.docx_第2页
第2页 / 共21页
操作系统上机实验报告.docx_第3页
第3页 / 共21页
操作系统上机实验报告.docx_第4页
第4页 / 共21页
操作系统上机实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

操作系统上机实验报告.docx

《操作系统上机实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统上机实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

操作系统上机实验报告.docx

操作系统上机实验报告

操作系统上机实验报告

课程设计(上机实习)报告

课程设计(上机实验)题目:

文件系统的模拟设计

目的与任务:

理解操作系统文件系统的某些工作原理,学习文件操作命令和目录操作命令的设计方法。

通过实验,使学生加深对操作系统文件系统某些问题的理解,归纳学习方法和思考方法,做到理论联系实际。

培养学生分析问题、解决问题的能力,提高学生软件设计能力和逻辑思维能力。

设计实现一个简单的文件系统,包括目录文件、普通文件,以及一些文件操作命令和目录操作命令(例如可以模仿DOS的有关命令)。

1.修改md命令;

2.修改Help命令;

3.修改命令行预处理程序;

4.新增fc命令,实现两个文件的比较;

5.新增batch命令,实现批处理;

6.完善copy命令,改善某些缺陷。

内容和要求:

1.修改md命令:

增加“属性”参数,用于创建指定属性的子目录。

命令形式如下:

md<目录名>[<属性>]。

属性包括R、H、S以及它们的组合(不区分大小写,顺序也不限)。

例如:

mdusrrh

其功能是在当前目录中创建具有“只读”和“隐藏”属性的子目录user.

2.修改Help命令:

修改help命令的显示方式和显示内容:

修改HelpComd()函数,使之提供菜单式的较详细的帮助信息。

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

3.修改命令行预处理程序:

修改命令行预处理函数ParseCommand(),使以下命令行(命令与参数间无空格符)可以正确执行:

cd/,cd..,dir/usr.copy/usr/boymail即命令名称与后边的“/”或“..”之间不需要空格也能正确执行。

4.新增fc命令,实现两个文件的比较:

命令形式:

fc<文件名1><文件名2>

5.新增batch命令,实现批处理:

命令形式:

batchbatchfile

命令功能:

从磁盘文件batchfile逐行读入命令行执行,直到batchfile中所有命令行都执行完毕为止。

6.完善copy命令,改善某些缺陷:

正确的功能应该是:

若当前目录中不存在文件boy,则报错;第2个命令若当前目录是根目录,因根目录没有父目录,故应报错;若当前目录的父目录中已经存在名为boy的文件,也报错(或询问用户是否覆盖)。

其他情况上述命令都应能正确执行。

课程设计(上机实习)报告

设计说明书

(说明书的撰写要求请参看封里的“报告填写说明3”。

篇幅不够可附页)

1.修改md命令

流程图如下:

课程设计(上机实习)报告

设计思想:

程序的指令格式为mduser|rh,需改为mduserrh格式,因此可在mduser|rh中修改代码实现修改功能。

要实现此功能,只需要获取目录的属性时删除判断操作符“|”的过程即可。

具体方法:

在GetAttrib函数中删除如下代码:

if(str[0]!

='|')

{

cout<<"\n命令中属性参数错误。

\n";

return-1;

}

修改后的操作方法:

输入 md user rh 即可正确执行

截图如下:

2.修改Help命令

流程图如下:

课程设计(上机实习)报告

 

设计思想:

利用switch(n)case…语句实现选择只查看需了解的操作命令。

      

具体方法:

首先利用cout语句输出改操作系统所拥有的命令.并用数字标明,供用户选择,再利用switch(n) case…语句实现具体内容的介绍。

例如:

cout<<"1.create\t";

case1:

cout<<"create<文件名>[<文件属性>]\n"

<<"——创建新文件,文件属性是r、h或s。

\n";

break;

运行效果如下:

3.修改命令行预处理程序

流程图如下:

 

设计思想:

在命令行预处理函数ParseCommand()中进行修改,使以下命令行(命令与参数间无空格符)可以正确执行:

cd/,cd..,dir/usr,copy/usr/boymail

具体方法:

在ParseCommand()处理cd/,dir/usr等情况的代码中增加处理“.”的代码。

for(i=0;comd[0][i]!

='\0';i++){

if(comd[0][i]=='/')//处理cd/,dir/usr等情况

break;

elseif(comd[0][i]=='.'&&comd[0][i+1]=='.')

break;

}

4.新增fc命令,实现两个文件的比较

流程图如下:

 

 

设计思想:

首先利用ProcessPath()函数和FindFCB()函数查找文件的目录所在首块号和文件所在首块号,判断其存在性,并记录其全路径名。

如果需要比较的文件都存在的话则进行比较。

具体实现:

intFcComd(intk)

{

if(k!

=2)

{

cout<<"出错:

输入命令格式错误,请重新输入"<

returnfalse;

}

shortinti,j=0,s1,s2,size1,size2,s,s3;

charattrib='\0',*FileName,*FileName1,Buffer1,Buffer2;

FCB*fcbp,*fcbp1,*fcbp2;

s=ProcessPath(comd[1],FileName,k,0,'\20');//取FileName所在目录的首块号

if(s<1)//路径错误

returns;//失败,返回

s1=FindFCB(FileName,s,attrib,fcbp);//取FileName的首块号(查其存在性)

fcbp1=fcbp;

if(s1<0)

{

cout<<"\n要比较的文件不存在。

\n";

return-1;

}

s3=ProcessPath(comd[2],FileName1,k,0,'\20');//取FileName1所在目录的首块号

if(s3<1)//路径错误

returns3;//失败,返回

s2=FindFCB(FileName1,s3,'\40',fcbp);//取FileName的首块号(查其存在性)

fcbp2=fcbp;

if(s2<0)

{

cout<<"\n要比较的文件不存在。

\n";

return-2;

}

size1=fcbp1->Fsize;//取文件一的长度

size2=fcbp2->Fsize;//取文件二的长度

if(size1==0&&size2||size2==0&&size1)

{

cout<<"两个文件的长度不同:

"<

cout<<"文件"<FileName<<"的长度"<

cout<<"文件"<FileName<<"的长度"<

cout<<"两文件在第一个字节处不同";

returnfalse;

}

while(s1>0&&s2>0)

{

for(i=0;i

{

if(j==size1&&j==size2)break;

Buffer1=Disk[s1][i];//读第一个文件内容

Buffer2=Disk[s2][i];//读第二个文件内容

if(Buffer1!

=Buffer2)//比较

{cout<<"文件"<FileName<<"长度为:

"<

cout<<"文件"<FileName<<"长度为:

"<

cout<<"第一个不同字节的位置为第"<

cout<<"此时两个文件的字符分别为"<

returnfalse;

}

}

if(i

}

if(j==size1&&j==size2)

{

cout<<"两文件内容相同"<

cout<<"文件长度为:

"<

returntrue;

}

return1;

}

效果图如下:

5.新增batch命令,实现批处理

流程图如下:

 

 

设计思想:

batch命令从磁盘文件batchfile逐行读入命令行执行,直到batchfile中所有命令行都执行完毕为止。

具体方法:

intBatchComd(intk)

{

shorti,s,size,jj=0,x=0,y=0;

charattrib='\0',*FileName;

chargFileName[PATH_LEN];//存放文件全路径名

FCB*fcbp;

if(k!

=1)

{

cout<<"\n命令参数中应该只有一个文件名。

\n";

return-1;

}

else

{

s=ProcessPath(comd[1],FileName,k,0,'\020');//取FileName所在目录的首块号

if(s<1)//路径错误

returns;//失败,返回

}

s=FindFCB(FileName,s,attrib,fcbp);//取FileName的首块号(查其存在性)

strcpy(gFileName,temppath);

i=strlen(temppath);

if(temppath[i-1]!

='/')

strcat(gFileName,"/");

strcat(gFileName,FileName);//构造文件的全路径名

if(s<0){

cout<<"\n文件"<

\n";

return-3;

}

if(s==0)

cout<<"\n文件"<

else{

size=fcbp->Fsize;

charBuffer[100][50];//分配动态内存空间

while(s>0){

for(i=0;i

if(jj==size)

break;

if(Disk[s][i]=='\n'){

Buffer[x][y]='\0';

cout<

x++;

y=0;

}

else{

Buffer[x][y]=Disk[s][i];

y++;

}

}

if(i

{

Buffer[x][y]='\0';

break;

}

s=FAT[s];

}

for(i=0;

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1