操作系统实习报告书Word下载.docx
- 文档编号:22277694
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:31
- 大小:707.41KB
操作系统实习报告书Word下载.docx
《操作系统实习报告书Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统实习报告书Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
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.总
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实习 报告书