操作系统综合实践报告.docx
- 文档编号:10408478
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:30
- 大小:560.31KB
操作系统综合实践报告.docx
《操作系统综合实践报告.docx》由会员分享,可在线阅读,更多相关《操作系统综合实践报告.docx(30页珍藏版)》请在冰豆网上搜索。
操作系统综合实践报告
XXXX大学
操作系统课程综合实践
题目命令解释器--模拟Shell功能
学院
班级
姓名
学号
指导教师:
2011年12月15日
命令解释器—模拟Shell功能
摘要:
本程序名为ShellSimulatedSystem,是根据《操作系统综合实践指导》中课题十五所编写的一个简单的命令解释器—模拟Shell功能,完成了要求中所提到的功能如:
可打开提示符、可获取用户输入的指令、可解析指令、可寻找文件命令、可执行基本的命令等。
ShellSimulatedSystem是一个控制台程序,用Delphi语言在DelphiXE开发环境中所写,运行于Windows环境,支持的命令包括寻找文件命令FindFile、创建文件命令CreateFile、删除文件命令DelFile、文件改名命令RenFile、复制文件命令Copy、剪切文件命令Cut、创建目录命令MkDir、删除目录命令RemoveDir、更改当前目录命令ChDir、运行程序命令Start、帮助命令/?
、退出命令Exit等。
关键词:
Shell;模拟;命令解释器;系统函数调用;
1.主要问题
本程序设计过程中采用了控制台应用程序(ConsoleApplication),因此面临的主要问题包括以下五个部分。
(1)如何获取用户的输入,即如何在控制台应用程序中获取用户的所有输入例如数字、字符、特殊字符等。
(2)如何解析用户输入,即如何根据用户所输入的数据分析出运行本程序所需求的命令以及相关的参数。
(3)如何执行命令,即如何根据解析出的命令和参数执行相应的命令功能。
(4)如何给予帮助功能,即如何向用户提供一定的帮助信息,从而使用户在短时间内掌握本程序所提供的命令及详细的使用方法。
(5)如何进行错误提示,即如果用户在运行程序过程中发生了错误如何采取相应的措施进行提示并返回到初始状态供用户再次使用。
2.基本概念
Shell与命令提示符:
Shell管理管理着用户与操作系统之间的交互功能:
等待用户输入,向操作系统解释用户的输入,并且处理各种各样的操作系统的输出结果。
因此可理解为命令解释器。
Shell在Unix与Linux等系统中使用最为频繁。
“命令提示符”则是Shell在Windows下的另一种表现方式,可认为是由DOS系统转变而来,在图形化界面操作系统尚未面世时主要的操作系统即是DOS,拥有大量的用户,因而在图形化操作系统推出时为了保持向后兼容通过模拟DOS环境产生了Windows下的“MS-DOS方式”等,虽然随着计算机产业的发展,Windows操作系统的应用越来越广泛,DOS面临着被淘汰的命运,但是因为它运行安全、稳定,有的用户还在使用,所以一般Windows的各种版本都与其兼容,用户可以在Windows系统下运行DOS,WindowsXP中的命令提示符进一步提高了与DOS下操作命令的兼容性,而如今的WindowsVista、Windows7也依然保留了MS-DOS,用户可以通过运行CMD或者Command然后在命令提示符中直接输入相关命令进行各种任务。
因此,无论是称作Shell亦或者命令提示符,其主要功能都是作为一个命令解释器,用来接收用户的输入并作出相应的反馈。
系统函数调用:
系统函数调用,顾名思义,是操作系统提供给用户程序调用的一组“特殊”
函数接口。
用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过相关的文件系统函数调用请求系统打开文件、关闭文件或读写文件,可以通过标准的系统输入输出函数在标准设备上进行信息输入输出,可以通过系统时钟函数调用获得系统时间或设置定时器等。
3.基本原理
本程序通过调用系统的标准输入函数获取用户的输入,然后调用一个递归函数TruncStr从用户的输入中解析出命令和参数,接着判断解析出的命令是否在本ShellSimulatedSystem程序中支持,若支持则继续将命令和参数提供给相应的子函数或子过程,由子函数或子过程完成相应的功能,最后调用系统的标准输出函数将结果输出到控制台程序的缓冲区屏幕上。
基本流程图如下:
4.设计思路
(1)用控制台标准输入函数Readln读入用户所输入的数据。
(2)判断判断用户输入是否为空,为空则返回继续等待输入,不为空则继续。
(3)调用子函数TruncStr从用户输入中解析出命令和参数。
(4)判断命令是否被支持,不支持则提示错误并返回继续等待输入,支持则
选择相应子函数或子过程并将参数传递过去。
(5)若命令执行成功则提示成功并返回等待用户继续输入,若执行错误则提示
错误并返回等待用户继续输入,若用户输入了退出命令则结束程序。
(6)输入/?
命令查看本ShellSimulatedSystem所支持的所有命令和详细用法
5.程序主要函数
(1)Readln():
控制台程序标准输入函数,用于获取用户输入。
(2)Writeln():
控制台标准输出函数,用于输出结果。
(3)TruncStr():
自定义的函数,用于从用户输入中截取命令和参数。
(4)Judge():
自定义的函数,用于判断用户输入的命令是否被支持。
(5)FindFile():
自定义的函数,用于寻找某一特定文件。
(6)CreateFile():
自定义的函数,用于实现创建文件的命令。
(7)DelFile():
自定义的过程,用于实现删除文件的命令。
(8)RenFile():
自定义的过程,用于实现将文件改名的命令。
(9)Copy():
自定义的过程,用于实现复制文件的命令。
(10)Cut():
自定义的过程,用于实现剪切文件的命令。
(11)MkDir:
自定义的过程,用于实现创建目录的命令。
(12)RemDir:
自定义的过程,用于实现删除目录的命令。
(13)ChDir:
自定义的过程,用于实现更改当前子目录的命令。
(14)StartApp:
自定义的过程,用于启动一个应用程序。
(15)Help:
自定义的过程,用于提供所有命令详细的帮助信息。
6.引用的标准函数及单元
(1)FileCreate、FileClose、DeleteFile、ReNameFile、CopyFile、
ForceDirectories、RemoveDir、SetCurrentDirectory、Shellexecute、
FindFirst、FindNext、FindClose等
(2)SysUtils,Classes,Windows,ShellAPI标准单元。
7.程序源码
ShellSimulatedSystem
ProgramShell;//Shell工程文件名
{$APPTYPECONSOLE}//控制台程序编译指令
{$R*.Res}//资源文件编译指令
uses
SysUtils,Classes,Windows,ShellAPI;//引用的标准库函数单元
label
Start;//声明标号Start
var//声明本程序所用的全局变量
Handle:
THandle;
BufferSize:
_COORD;
ConsoleWindow:
_SMALL_RECT;
I,StrIndex:
Integer;
Input:
string;
CmdList,ParamList:
TStringList;
functionTruncStr(InputStr:
string):
boolean;//定义TruncStr函数,此函数为递归函数,
var//功能是将用户输入的字符串拆分出[命令]
Index:
Integer;//和[参数]两部分,并用TStringList的对象
TempStr1,TempStr2:
string;//ParamList进行保存
begin
TempStr1:
=Trim(InputStr);
ifTempStr1=''then
begin
Result:
=False;
Writeln('PleaseInputaCommand!
');
Exit;
end;
Index:
=Pos('',TempStr1);
ifIndex>0then
begin
ParamList.Add(Copy(TempStr1,1,Index-1));
TempStr2:
=Copy(TempStr1,Index+1,Length(TempStr1));
ifPos('',TempStr2)>0then
TruncStr(TempStr2)
else
ParamList.Add(TempStr2);
end
else
ParamList.Add(TempStr1);
Result:
=True;
end;
functionJudge(CmdStr:
string):
boolean;//定义Judge函数,其功能是将ParamList[0]
var//中保存的[命令]与本ShellSimulated系统
J:
Integer;//所支持的[命令]进行对比,若本Shell模拟
begin//系统中不支持则提示用户[ThisCommand
Result:
=False;//isnotSupported!
]
forJ:
=0toCmdList.Count-1do
begin
ifUpperCase(CmdStr)=CmdList[J]then
begin
Result:
=True;
Break;
end
else
begin
ifJ=CmdList.Count-1then
begin
Writeln('ThisCommandisnotSupported!
');
Result:
=False;
end;
end;
end;
end;
functionCreateFile(FileName:
string):
boolean;//定义CreateFile函数,本函数即为
var//[CreateFile]命令所完成的功能.
FileHandle:
Integer;//即创建一个名由参数FileName所指定的文件
begin//若FileName中不包含驱动器名及路径名
Try//则会使用当前路径及该应用程序所在的路径
FileHandle:
=FileCreate(FileName);//本函数只接受一个string类型的参数
ifFileHandle>0then//多余的参数会被自动忽略
begin//文件创建成功则提示CreateFileSuccessfully!
Writeln('CreateFileSuccessfully!
');//文件创建失败则提示FailtoCreateFile!
FileClose(FileHandle);//参数错误则提示AnFatalErrorwithParametersOccurs!
Result:
=True;
end
else
begin
Writeln('FailtoCreateFile!
');
Result:
=False;
end;
Except
Result:
=False;
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureDelFile(FileName:
string);//定义DelFile过程,此过程完成[DelFile]命令
begin//此函数只接受一个string类型的参数FileName
Try//删除文件成功提示DeleteFileSuccessfully!
ifDeleteFile(PWideChar(FileName))then//删除文件失败提示FailtoDeleteFile!
Writeln('DeleteFileSuccessfully!
')//参数错误提示AnFatalErrorwithParametersOccurs!
else
Writeln('FailtoDeleteFile!
');
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureRenFile(OldName,NewName:
string);//定义RenFile过程,完成[RenFile]命令
begin//本过程只接受两个string类型的参数[OldName]和[NewName]
Try//文件改名成功则提示ReNameFileSuccessfully!
ifReNameFile(OldName,NewName)then//文件改名失败则提示FailtoReNameFile!
Writeln('ReNameFileSuccessfully!
')//参数错误则提示AnFatalErrorwith
else//ParametersOccurs!
Writeln('FailtoReNameFile!
');
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureCopy(lpExistingFileName,lpNewFileName:
string);//定义Copy过程,完成[Copy]命令
begin//本过程只接受两个string类型的参数
Try//lpExistingFileName和lpNewFileName
//依次代表要复制的文件的源路径和目的路径
ifCopyFile(PWideChar(lpExistingFileName),PWideChar(lpNewFileName),False)then
Writeln('CopyFileSuccessfully!
')//成功提示CopyFileSuccessfully!
else//失败提示FailtoCopyFile!
Writeln('FailtoCopyFile!
');//参数错误提示AnFatalErrorwithParametersOccurs!
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureCut(Src,Dest:
string);//定义Cut过程,完成[Cut]命令
var//本过程只接受两个string类型的参数Src,Dest
Succ1,Succ2:
boolean;//分表代表所要剪切的文件的源路径和目的路径
begin//成功则提示CutFileSuccessfully!
Try//失败则提示FailtoCutFile!
//参数错误则提示AnFatalErrorwithParametersOccurs!
Succ1:
=CopyFile(PWideChar(Src),PWideChar(Dest),False);
Succ2:
=DeleteFile(PWideChar(Src));
ifSucc1andSucc2then
Writeln('CutFileSuccessfully!
')
else
Writeln('FailtoCutFile!
');
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureMkDir(Dir:
string);//定义MkDir过程,完成[MkDir]命令
begin//本过程只接受一个string类型的参数Dir
Try//成功则提示CreateDirectorySuccessfully!
ifForceDirectories(Dir)then//失败则提示FailtoCreateDirectory!
//参数错误则提示AnFatalErrorwithParametersOccurs!
Writeln('CreateDirectorySuccessfully!
')
else
Writeln('FailtoCreateDirectory!
');
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureRemDir(Dir:
string);//定义RemDir过程,完成[RemoveDir]命令
begin//本过程只接受一个string类型的参数Dir
Try//成功则提示RemoveDirectorySuccessfully!
ifRemoveDir(Dir)then//失败则提示FailtoRemoveDirectory!
//参数错误则提示AnFatalErrorwithParametersOccurs!
Writeln('RemoveDirectorySuccessfully!
')
else
Writeln('FailtoRemoveDirectory!
');
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureChDir(Dir:
string);//定义ChDir过程,完成[ChDir]命令
begin//本过程只接受一个string类型的参数Dir
Try//成功则提示ChangeDirectorySuccessfully!
ifSetCurrentDir(Dir)then//失败则提示FailtoChangeDirectory!
//参数错误则提示AnFatalErrorwithParametersOccurs!
Writeln('ChangeDirectorySuccessfully!
')
else
Writeln('FailtoChangeDirectory!
');
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureStartApp(FileName:
string);//定义StartApp过程,完成[Start]命令
begin//本过程只接受一个string类型的参数FileName
Try//成功则提示RunProgramSuccessfully!
//失败则提示FailtoRunProgram!
'
ifShellExecute(0,'Open',PWideChar(FileName),nil,nil,SW_SHOWNORMAL)>32then
//参数错误则提示AnFatalErrorwithParametersOccurs!
Writeln('RunProgramSuccessfully!
')
else
Writeln('FailtoRunProgram!
');
Except
Writeln('AnFatalErrorwithParametersOccurs!
');
End;
end;
procedureHelp;//定义Help过程,完成[/?
]命令
begin//本过程不接受任何参数
Writeln('AlltheCommandsSupportedareListedBelow');//本过程列举此Shell模拟系统
Writeln('');//所支持的命令及详细用法和具体事例
//其中在此系统里涉及到路径若未指明具体
Writeln('CreateFileThisCommandisusedtocreateafile.');
Writeln('Usage:
CreateFile[FileName]');//具体驱动器号和路径则默认使用当前路径
Writeln('Example:
CreateFileTemp.txt');//即本Shell模拟系统程序所在的具体路径
Writeln('CreateFileC:
\Temp\Temp.txt');
Writeln('');
Writeln('DelFileThisCommandisusedtodeleteafile.');
Writeln('Usage:
DelFile[FileName]');
Writeln('Example:
DelFileTemp.txt');
Writeln('DelFileC:
\Temp\Temp.txt');
Writeln('');
Writeln('RenFileThisCommandisusedtoReNameaspecifiedfile.');
Writeln('Usage:
RenFile[OldName][NewName]');
Writeln('Example:
RenFileTemp.txtTest.txt');
Writeln('RenFileC:
\Temp.txtC:
\Test.txt');
Writeln('');
Writeln('CopyThisCommandisusedtocopyafilefromoneplacetoanother.');
Writeln('Usage:
Copy[SourcePath][DestinationPath]');
Writeln('Example:
CopyTemp.txtD:
\Temp.txt');
Writeln('CopyC:
\Temp.txtD:
\Temp.txt');
Writeln('');
Writeln('CutThisCommandisusedtocutafilefromaplacetoanother.');
Writeln('Usage:
Cut[SourcePath][DestinationPath]');
Writeln('Example:
CutTemp.txtD:
\Temp.txt');
Writeln('CutC:
\Temp.txtD:
\Temp.txt');
Writeln('');
Writeln('MkDirThisCommandisusedtoCreateadirectorywithafullpath.');
Writeln('Usage:
MkDir[FullPath]');
Writeln('Example:
MkDi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 综合 实践 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)