操作系统实习报告书Word下载.docx

上传人:b****8 文档编号:22277694 上传时间:2023-02-03 格式:DOCX 页数:31 大小:707.41KB
下载 相关 举报
操作系统实习报告书Word下载.docx_第1页
第1页 / 共31页
操作系统实习报告书Word下载.docx_第2页
第2页 / 共31页
操作系统实习报告书Word下载.docx_第3页
第3页 / 共31页
操作系统实习报告书Word下载.docx_第4页
第4页 / 共31页
操作系统实习报告书Word下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

操作系统实习报告书Word下载.docx

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

操作系统实习报告书Word下载.docx

5)dir:

显示一个目录中的文件和子目录,当后面没有任何符号时,显示显

示当前目录中的文件和子目录列表,如果后边指定相应的目录,则列出对应目录下的文件和子目录表;

6)mkdir:

创建指定路径下的子目录

7)more:

逐屏显示输出的内容。

8)move:

将文件移动到另一个位置。

9)rmdir:

将指定的文件或目录删除

10)help:

帮助,显示所能进行的操作

2.实现编译平台及运行平台

在windowsXP、windowsVista、windows7下运行平台式VisualStudioC++6.0及VisualStudio2005

3.详细设计

1)首先创建文件A,并对A进行初始化,A中包含B、C目录,B目录下有十个a[i]文件。

并将刚刚初始化好的A中的信息用writein()写进A文件。

2)实现命令的解析:

a)用getline()函数获得用户输入的命令;

b)定义全局变量stringorder和stringobj分别存放当前命令和操作路径

c)以””为分隔符,用循环的方式分割出当前命令和操作路径。

d)判断当前命令与存在命令是否相符,若相符实现相应函数,若不相符,出现不存在命令的提示。

3)voidhelp()函数打印帮助信息,打印内容包括有哪些命令以及各个命令如何使用。

若只输入help命令,则进入到stringlline==help的函数中。

若除了输入help命令还输入相应命令,则通过之后一系列helpcd()之类的特定帮助函数用来对特定功能进行帮助。

4)cd命令的实现。

用path存放当前路径,将输入路径打印出来。

若只输入cd而没有输入路径,则系统显示当前路径继续服务。

并通过seekp函数将指针定位到A中当前cd之后的内容。

5)voiddir()列出目录下的所有文件及文件夹:

a)当解析当order为dir时,进入dir函数。

b)将传过来的参数s变成s\,在Path[]中寻找s\,通过字符串函数提取判断,若找到并且Path[]中s\之后的所有字符串中不再有\出现时,则将此路径之后的所有内容显示。

c)显示时用seekp函数定位到已找到的相应位置,并把该位置之后的信息内容全部显示出来。

d)定位时,要用循环,将之前所有的内容的总长度相加存入sum,将指针定位到sum+1。

6)voidmkdir(stringobj1,stringobj2)创建新文件或目录:

a)在执行该命令之前,要将obj用“”分割开,分为obj1和obj2。

Obj1存放的是当前要创建的文件或目录的路径及名称,obj2存放的是创建的对象的属性,即是文件还是目录。

b)在Path[]中寻找obj1,若找到,则说明要创建的对象已经存在,不能再创建,若没有找到,则可以创建。

c)若要创建的对象不存在,则对其各个对象进行编写,同时,将刚创建的对象的路径存入Path[],将刚创建的对象存入total[]。

d)用writein()函数对磁盘空间进行整理。

7)voidmore(stringch)逐屏显示输出。

调用more()函数实现。

完成判断,定位,打印输出的过程。

8)voidcopy(stringobj1,stringobj2)

Obj1存放的是当前要复制的对象的路径及名称,obj2存放的是要复制到的路径。

b)obj1和obj2相等,则提示对象自身不能复制。

c)若obj1和obj2不相等,则进行复制,复制时要对路径进行修改,并对Path[]和total[]进行相应添加。

d)writein()磁盘空间整理。

9)voidrmdir(stringstr)可以删除一个目录或者文件,调用rmdir()函数。

10)voidmove(stringobj1,stringobj2)移动目录或文件

Obj1存放的是当前要移动的对象的路径及名称,obj2存放的是要移动到的路径。

b)首先判断,若obj1和obj2相等,则提示对象不能自身移动。

c)若通过判断,则首先将obj1复制到obj2下(使用copy()中的命令),再将obj1删除(使用rmdir()中的命令)。

11)voidrename(stringobj1,stringobj2)修改文件名或目录名

Obj1存放的是当前要修改的对象的路径及名称,obj2存放的是要修改成的路径及名称。

b)调用rename()函数。

12)voidmain()负责调用相应的函数满足用户的需求:

a)首先打印信息cout<

<

"

Shell-AboveWindows7[Ver1.0]\n"

;

cout<

(C)Copyright2010zx_wql_djy.\n\n"

输出当前磁盘cout<

A:

\\>

b)根据order和obj调用相应的函数。

4.结构说明

定义String型字符串,order存放当前命令,obj存放当前操作路径,path存放当前路径:

stringorder="

obj="

path="

charPath[maxdir][20];

//存放所有路径

定义文件结构体childfile,具有五个属性:

文件内容、属性(文件或目录)、路径、文件长度、文件名。

typedefstructchildfile{//childfile*pfirst[maxdir];

stringcontent;

//文件内容

stringattribute;

//属性:

目录文件

stringppath;

//路径

intlength;

//文件长度

stringname;

//文件名

}childfile,*pfile;

定义结构体指针,用于进行文件的存取和读写:

pfileA,B,C,D;

pfilea[10];

//B目录下的子文件

pfiletotal[maxdir];

//存放所有已存在的目录

三.结果

⏹实习程序的使用说明书

1.输入help,显示所能进行的操作。

2.输入cd目录路径显示指定驱动器中的当前目录,不带参数只键入CD则

显示当前驱动器和目录。

3.输入chdir:

显示当前目录的名称,当后面没有任何符号时,显示前目录

中的文件和子目录列表,如果后边指定相应的目录,则列出对应目录下的文件和子目录表;

4.输入dir目录路径显示指定驱动器中的所有文件和子目录

5.输入more目录路径显示当前目录路径下的文件内容

6.输入copy目录路径1目录路径2将“目录路径1”下的内容复制到“目

录路径2

7.输入copy目录路径1目录路径2将文件复制到另一个位置

8.输入rmdir目录路径将指定的文件或目录删除.

9.输入move目录路径1目录路径2将“目录路径1”下的内容移动到“目

录路径2”。

10.输入rename目录路径1修改的目录路径名2将目录路径1修改成2。

⏹整体流程图

⏹流程图和函数说明:

1.Dir()函数:

示当前目录中的文件和子目录列表,如果后边指定相应的目录,则列出对应目录下的文件和子目录表.

Ø

解析输入的命令,当存放命令的order字符串中存放的为dir时,调用dir(s)函数。

将传过来的参数s变成s\,将Path[]中的路径存入tpath,通过字符串函数提取判断,若找到并且Path[]中s\之后的所有字符串中不再有\出现时,则将此路径之后的所有内容显示。

if((tpath.find(s,0)<

tpath.length())&

&

(tpath.find('

\\'

tpath.find(s,0)+s.length()+1)>

=tpath.length()))

{/*如果查找在输入命令行中出现s("

\\"

)的位置比tpath的长度小,并且从此位置向后找到(“\\”)的位置

比tpath.length大或者等于length——即在找到出现\\的i位置后没有子目录*/

intsum=0;

for(intk=0;

k<

i;

k++)//找到相应位置

{

sum+=total[k]->

attribute.size()+total[k]->

content.size()+2+total[k]->

name.size()+total[k]->

ppath.size();

//文件的属性、内容、名字、路径长度相加

}

显示时用seekp函数定位到已找到的相应位置,并把该位置之后的信息内容全部显示出来。

fout.seekg(600+sum+5*i,ios:

:

beg);

//定位:

从开始定位到个地址单元+已读取的文件长度+每个文件性质后设置的空格

定位时,要用循环,将之前所有的内容的总长度相加存入sum,将指针定位到sum+1。

流程图如下:

2.COPY:

将文件复制到另一个位置.

voidcopy(stringobj1,stringobj2)

在执行该命令之前,要将obj用“”分割开,分为obj1和obj2。

for(i=0;

i<

maxdir;

i++)

{

if(Path[i]==obj1)//将obj1赋到Path中

{p1=i;

break;

}//当前位置记录到p1

}

for(j=0;

j<

j++)//

if(Path[j]==obj2)//将obj2赋到Path中

{p2=j;

}//当前位置记录到p2

判断如果obj1和obj2相等,则提示对象自身不能复制。

f(p1==p2)

cout<

文件无法自身复制"

endl;

若obj1和obj2不相等,则进行复制,复制时要对路径进行修改,并对Path[]和total[]进行相应添加。

elseif(p1!

=-1&

p2!

=-1)

pfilecpdir=newchildfile;

cpdir->

attribute=total[p1]->

attribute;

content=total[p1]->

content;

length=total[p1]->

length;

name=total[p1]->

name;

ppath.resize(100);

ppath=total[p2]->

ppath+"

+obj1.substr(obj1.length()-1,1);

total[flag2]=cpdir;

flag2++;

strcat(Path[flag],cpdir->

ppath.c_str());

//每次将路径存入到path中去,并加

flag++;

writein()磁盘空间整理。

3.MOVE:

将文件移动到另一个位置

voidmove(stringobj1,stringobj2)移动目录或文件

voidmove(stringobj1,stringobj2)

{

intp1=-1,p2=-1;

inti,j;

for(i=0;

if(Path[i]==obj1)

}

j++)

if(Path[j]==obj2)

Obj1存放的是当前要移动的对象的路径及名称,obj2存放的是要移动到的路径。

首先判断,若obj1和obj2相等,则提示对象不能自身移动。

if(p1==p2)

文件无法自身移动"

若通过判断,则首先将obj1复制到obj2下(使用copy()中的命令):

elseif(p1!

//先把obj1复制到obj2

////将输入路径的最后一个字符提取加入到obj1中,并且与ppath字串中的内容链接起来

//将路径存入到Path中去(将字符串接到Path【flag】后面)

再将obj1删除(使用rmdir()中的命令)。

for(inti=0;

i++)//复制后再把obj1删除

{

if(strcmp(obj1.c_str(),Path[i])==0)

for(intj=i;

{

total[j]=total[j+1];

for(intk=0;

20;

k++)

Path[j][k]=Path[j+1][k];

}

}

writein();

//磁盘空间整理

4.More:

逐屏显示输出的内容

首先判断路径存在,则找到相应的位置,读出件的属性、内容、名字、路径、长度信息

for(intk=0;

k++)//找到相应位置

sum+=total[k]->

使用seekp函数定位到已找到的相应位置,并把该位置之后的信息内容全部显示出来。

fout.seekg(600+sum+5*i,ios:

//从开始定位到600个地址单元+已读取的文件长度+每个文件性质后设置的空格

5.Writein:

磁盘整理程序,将文件重新写入A中

voidwritein()

打开文件A,循环向Path中写入20个字符,如果目录指针total【】中有内容,则将total的五个信息分别写入文件中。

fout.open("

A"

ios:

out|ios:

binary);

for(inti=0;

{

fout.write((char*)Path[i],20);

//将Path写到A中向文件中写入个字符

}

if(total[i])//如果total存在,就将total的信息写到A中

fout<

total[i]->

ppath;

"

6.Mkdir:

创建指定路径下的子目录

在Path[]中寻找obj1,若找到,则说明要创建的对象已经存在,不能再创建,若没有找到,则可以创建。

for(inti=0;

if(strcmp(Path[i],obj1.c_str())==0)

cout<

您输入的路径已存在"

p=1;

若要创建的对象不存在,则对其各个对象进行编写,同时,将刚创建的对象的路径存入Path[],将刚创建的对象存入total[]。

if(p==0)

D=newchildfile;

D->

ppath=obj1;

//存放名称

name=obj.substr(obj1.length()-1,1);

//将输入路径的最后一个字符提取加入到obj1中,(从obj.length-1开始的一个字符)

attribute=obj2;

//文件属性

length=sizeof(childfile);

//子文件的长度

content="

%%"

//存放目录内容

total[flag2]=D;

//结构体指针指向D

strcat(Path[flag],D->

writein();

obj2<

创建完毕!

7.Rename:

修改文件名或目录名

调用rename()函数。

解析命令行,用substr得到obj1的最后一个字符既要修改的对象,将obj2中的字符重新赋值给路径,替换原名称。

intp=0;

for(inti=0;

total[i]->

name=obj2.substr(obj1.length()-1,1);

//得到输入命令行的最后一个字符赋值给目录存放结构体的名字指针

ppath=obj2;

//重置路径

strcpy(Path[i],total[i]->

//将目录存放结构体的内容赋值给路径结构体数组

修改成功!

endl<

//判断是否找到路径

您输入的路径不存在!

path<

8.Rmdir:

将指定的文件或目录删除

以删除一个目录或者文件,调用voidrmdir(stringstr)函数.

先解析输入的命令行内容,当读取的字符串内容与Path[]内容一致时找到路径位置;

使用循环将目录里的文件列表移动覆盖原位置的信息;

最后更新Path[]中的内容。

进行磁盘空间整理调用Writein函数。

if(strcmp(str.c_str(),Path[i])==0)//定位找到删除位置i

for(intj=i;

j++)//将每一个目录里的文件列表移动

total[j]=total[j+1];

//后一位置前移

for(intk=0;

Path[j][k]=Path[j+1][k];

cout<

删除成功!

p=1;

流程图如下:

⏹运行结果

1.运行开始界面

2.输入help命令显示所有命令信息

3.Cd命令实现

4.返回上一级目录

5.Dir命令

6.Mkdir命令

7.More命令

8.Copy命令

9.Rmdir命令

10.Move命令

11.Rename命令

12.退出程序

13.健壮性考虑

四.分析

1.总

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

当前位置:首页 > 解决方案 > 学习计划

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

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