1、OS课程设计实验报告计算机与信息学院操作系统课程设计报告专 业 班 级 计算机科学与技术08-5班 学生姓名及学号 邹纯纯 20082681 课程教学班号 任 课 教 师 刘晓平、李琳、田卫东 实验指导教师 李琳 实验地点 逸夫楼507 2010 2011 学年第 二 学期目录第1章 课程设计任务、要求、目的.3第2章 原理及算法描述.3第3章 开发环境.4第4章 重要算法和设计思路描述.4第5章 程序实现-数据结构.7第6章 程序实现-程序清单.8第7章 总结.24第8章 参考文献.24 第一章 课程设计任务、要求、目的1.1课程设计任务 本次课程设计的任务是在windows环境下实现兼容U
2、nix/Linux操作系统的命令接口,并实现一些指定的命令功能。1.2课程设计要求和目的 1、为Windows操作系统建立一个兼容Unix命令的命令接口; 2、实现命令包括ls,cat,cp,mv,md,rd,cd,sort,more,print,命令的内容 与详细格式请查阅unix命令手册;3、可以字符形式接收命令,执行命令,然后显示命令执行结果。 第二章 原理及算法描述计算机的操作我们通常使用的是windows操作系统,在windows2000以上的版本中,我们只需在“搜索程序和文件”选项框中输入cmd命令进入windows操作系统中就可以达到实现系统相关功能的目的。同样在Unix和Lin
3、ux操作平台中,也可以实现相关命令以完成操作系统的相关操作。现在我们必须实现这样一种方法,即为windows操作系统建立一个兼容Unix命令的命令接口。在主程序中新建一个Windows_Unix.exe文件,然后调用相关实现相关Unix命令的函数实现命令功能。具体命令的实现主要通过系统的API函数调用与之功能相同或相似的Dos命令,这样就可以实现在Windows操作系统中虚拟地实现Unix命令。 第三章 开发环境1、硬件环境:微型计算机。2、软件环境:Windows 7 操作系统,语言环境为Visual C+ 6.0。第4章 重要算法和设计思路描述1、实验要实现的Unix命令包括ls、cat、
4、cp、mv、md、rd、cd、sort、more、print等。2、Unix常用指令功能内容:(1)ls ls 的意义为 list,实现显示指定目录中的文件和子目录。如果你在下 ls 指令后面没有跟著任何的文件名或目录名,则会显示出当前目前目录中所有文件信息。(2)CatCat指令实现指定目录中文件,打开文件并显示其中的内容的功能,当要打开的文件无效时会返回打开文件失败。(3)cp cp 是复制(COPY) ,也就是将一个或多个文件复制成另一个文件或者是将其复制到另一个目录去,另外可以对要复制的目标文件进行重命名操作。(4)mv md drive:pathnmv 的意义为 move , 主要是
5、实现将文件从一个目录移到另一个目录。(5)mdmd实现在指定的目录或文件下创建目录。(6)rdRd实现删除当前指定的内容为空的目录,若当前目录不为空则无法进行删除目录操作。(7)cdCd指令实现显示当前目录的名称或将其更改。程序中我设定的是Cd -s为显示当前目录,而cd .n,其中.为要父目录,即指定要切换到的目录。(8)sortSort指令实现对指定文件中的所有的行进行排序,并将结果标准输出。排序的算法可以是按升序或按降序进行排列。(9)moreMore实现将指定超过一页的文件临时停留在屏幕,等按任何的一个键后才继续显示。(10)printprint指令实现对指定的文件连接当前计算机的打印
6、设备进行打印操作。 除了上述的实验要求的命令,为了便于操作和命令的使用查询,我另外设置了以下指令:help: 提供帮助信息。n命令 + -help: 提供命令的详细操作信息。nexit: 退出命令解释程序。n3、设计思路(1)void lsFunction(string *lsinput,int lscount)函数实现显示一个目录中的文件和子目录。如果失败返回显示“路径可能不存在!” 。(2)void catFunction(string *catinput,int catcount)函数实现打开文件并显示内容。如果失败返回显示“无法打开文件!”。(3)void cpFunction(str
7、ing *cpinput,int cpcount)函数实现复制文件和目录树。如果成功返回显示“复制成功”,否则显示“文件或目录可能不存在!” 。(4)void mvFunction(string *mvinput,int mvcount)函数实现将文件从一个目录移到另一个目录。如果成功返回显示“成功” ,否则显示“文件或目录可能不存在!” 。(5)void mdFunction(string *mdinput,int mdcount)实现在指定的目录或文件下创建目录。(6)void rdFunction(string *rdinput,int rdcount)函数实现删除空目录。如果成功返回显
8、示“删除目录成功” ,否则显示“文件夹可能不存在或文件夹不为空!” 。(7)void cdFunction(string *cdinput,int cdcount)函数实现显示当前目录的名称或将其更改。如果失败返回显示“路径可能不存在!” 。(8)void sortFunction(string *sortinput,int sortcount)指令实现对指定 文件中的所有的行进行排序,并将结果标准输出。排序的算法可以是按升序或按降序进行排列。(9)void moreFunction(string *moreinput,int morecount)实现将指定超过一页的文件临时停留在屏幕,等按任
9、何的一个键后才继续显示。(10)void printFunction(string *printinput,int printcount)实现对指定的文件连接当前计算机的打印设备进行打印操作。(11)void helpFunction()函数实现提供Windows命令的帮助信息。如果失败返回显示“命令语法不正确” 。(12)void exitFunction()函数实现退出命令解释程序。(13)void printPath()函数实现显示当前操作的目录路径。(14)在主函数int main()中通过输入具体的Unix命令来判断进入何种函数实现相应的功能。此外在命令名后加入-help,可以调出相
10、应命令的使用说明。第5章 程序实现-数据结构 是exit指令 判断不是exit命令ls()cat()cp()mv()md()rd()cd()sort()more()print()第六章 程序实现-程序清单程序清单:#include windows.h#include fstream#include string#include iomanip#include iostreamusing namespace std;#define PRINTHEADHELP = tOS课程设计操作系统接口:兼容Unix/Linux命令接口n 要求:n 1、为Windows操作系统建立一个兼容Unix命令的命令接
11、口;n 2、实现命令包括ls,cat,cp,mv,md,rd,cd,sort,more,print等命令的内容与详细格式请查阅 unix命令手册;n 3、可以字符形式接收命令,执行命令,然后显示命令执行结果;n=#define PRINTHELP 有关每个命令的详细信息,请键入命令-help。n ls 显示指定目录中的文件和子目录。n cat 打开文件并显示内容。n cp 复制文件和目录树。n mv 将文件从一个目录移到另一个目录。n md 创建目录n rd 删除空目录。n cd 显示当前目录的名称或将其更改。n sort 对指定文件中的所有的行进行排序,并将结果标准输出。n more 超过一
12、页的文件临时停留在屏幕,等按任何的一个键后才继续显示。n print 打印。n help 提供帮助信息。n 命令 + -help 提供命令的详细操作信息。n exit 退出命令解释程序。nn 有关工具的详细信息,请参阅联机帮助中的命令行参考。nn#define PRINTLSHELP 显示目录中的文件和子目录列表。n ls drive:pathfilename +?n drive:pathfilenamen 显示要列出的驱动器、目录或文件。n#define PRINTCATHELP 打开文件并显示内容。n cat drive:pathdirname1#define PRINTCPHELP 复制
13、文件和目录树。n cp source destinationn source 指定要复制的文件。n destination 指定新文件的位置或名称。n#define PRINTMVHELP 将文件从一个目录移到另一个目录。n 移动:mv drive:pathdirname1 destinationn 重命名:mv drive:pathdirname1 dirname2n#define PRINTMDHELP 创建目录。n md drive:pathn#define PRINTRDHELP 删除目录。n RMDIR /S /Q drive:pathn RD /S /Q drive:pathn#d
14、efine PRINTCDHELP 显示当前目录名或改变当前目录。n cd -s:显示drive:path +?n cd .n . 指定要改成父目录。n#define PRINTSORTHELP 对指定文件中的所有的行进行排序,并将结果标准输出。n sort sourcen source 指定要进行行排序的文件n#define PRINTMOREHELP 使超过一页的文件临时停留在屏幕,等按任何的一个键后才继续显示。n more sourcen source 指定要进行显示的文件n#define PRINTPRINTHELP 将文件打印出来。n print sourcen source 指定要
15、进行打印的文件n/-1、lsvoid lshelpFunction() coutPRINTLSHELPendl;void lsFunction(string *lsinput,int lscount) void printPath(void); if(1 = lscount) HANDLE handle; char fc50; FILETIME lpCreationTime,lpLastAccessTime,lpLastWriteTime; SYSTEMTIME stime; WIN32_FIND_DATA* fd = new WIN32_FIND_DATA(); if(!:GetCurren
16、tDirectory(50,fc) cout路径可能不存在!cFileName,GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS, NULL); if(GetFileTime(hDir, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime) FILETIME ftime; FileTimeToLocalFileTime(&lpLastWriteTime, &ftime); /转换成本地时间 FileT
17、imeToSystemTime(&ftime, &stime); /转换成系统时间格式 coutsetfill(0); coutstime.wYear-setw(2)stime.wMonth-setw(2) stime.wDay setw(2)stime.wMinute:setw(2)stime.wMilliseconds; cout cFileNameendl; CloseHandle(hDir); while (FindNextFile(handle, fd); FindClose(handle); printPath(); else if (lscount = 2) if (lsinpu
18、t1 = ? ) coutPRINTLSHELPendl; else HANDLE handle; char fc50,fe50; FILETIME lpCreationTime,lpLastAccessTime,lpLastWriteTime; SYSTEMTIME stime; WIN32_FIND_DATA* fd = new WIN32_FIND_DATA(); if (!:GetCurrentDirectory(50,fc) cout路径可能不存在!endl; if (!SetCurrentDirectory(lsinput1.c_str() cout路径可能不存在!endl; if
19、 (!:GetCurrentDirectory(50,fe) cout路径可能不存在!cFileName,GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS, NULL); if(GetFileTime(hDir, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime) FILETIME ftime; FileTimeToLocalFileTime(&lpLastWriteTime, &ftime); /
20、 转换成本地时间 FileTimeToSystemTime(&ftime, &stime); / 转换成系统时间格式 coutsetfill(0); coutstime.wYear-setw(2)stime.wMonth-setw(2) stime.wDay setw(2)stime.wMinute:setw(2)stime.wMilliseconds; cout cFileNameendl; CloseHandle(hDir); while (FindNextFile(handle, fd); FindClose(handle); if(!SetCurrentDirectory(fc) co
21、ut路径可能不存在!endl; printPath(); /-2、catvoid cathelpFunction() coutPRINTCATHELPendl;/* /单独显示打开文件地址string catFunction() string file_name; coutfile_name; ifstream infile(file_name.c_str(),ios:in); /open file with the way of input if (!infile) cout无法打开文件 file_name.c_str()!; char f2000; infile.getline(f,200
22、0,EOF);cout_endl; coutfendl;cout_endl; infile.close(); return f;*/void catFunction(string *catinput,int catcount) void printPath(void); if (1 = catcount) cout命令语法不正确!endl; printPath(); if (2 = catcount) ifstream infile(catinput1.c_str(),ios:in); if (!infile) cout无法打开文件 catinput1.c_str()!endl; goto L
23、; char f2000; infile.getline(f,2000,NULL); /EOFcout_; coutfendl;cout_;L: infile.close(); printPath(); /-3、cpvoid cphelpFunction() coutPRINTCPHELP cp 源文件路径 目的文件路径 /另外在copy的过程可以进行重命名操作,即cpinput2.c_str() void printPath(void); if (1 = cpcount) cout命令语法不正确!endl; printPath(); else if (!CopyFile(cpinput1.c_str(),cpinput2.c_str(),1) cout文件或目录可能不存在t!endl; printPath(); else cout复制文件成功!endl; printPath(); /-4、mvvoid mvhelpFunction() coutPRINTMVHELPendl;void mvFunction(string *mvinput,int mvcount) void printPath(void); if (1 = mvcount) cout命令语法不正确!endl; printPath(); else if (mvcoun
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1