您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Windows命令接口实验报告
操作系统课程设计报告作者:半童合肥工业大学独立之精神,自由之思想!1Windows命令接口实验一.实验题目:第29题——操作系统接口:Windows命令接口。(3人)4分二.实验任务:1.设计要求:为Windows操作系统建立兼容的DOS命令接口,文件与目录命令;具体命令:DIR,RD,CD,MD,DEL,MOVE,REN,COPY,XCOPY,TIME,DATE,SORT,重定向命令,.,|,MORE,TYPE,CLS,EXIT命令格式可参照Windows的CMD.EXE或MS-DOS提供的命令;设计命令的名称、参数等格式;可以字符形式接收命令,执行命令,然后显示命令执行结果.2.设计目的:(1)DIR命令:能够正确显示一个目录里面的子目录和文件(2)RD命令:能够删除一个空目录(3)CD命令:能够打开一个存在的目录(4)MD命令:能够建立一个空目录(5)DEL命令:能够删除一个文件(6)MOVE命令:能够移动一个目录或文件(7)REN命令:能够重命名一个目录或文件(8)XCOPY命令:能够拷贝整个目录(8)TIME命令:显示系统的时间(8)DATE命令:显示系统的日期(8)SORT命令:对文本内容进行分类(8)MORE命令:逐步分屏显示(8)TYPE命令:显示文本内容(8)CLS命令:清楚屏幕显示(8)EXIT命令:退出三:实验环境:1.PC机一台386以上2.MicrosoftVisualStudio2010软件3.实现语言:C语言操作系统课程设计报告作者:半童合肥工业大学独立之精神,自由之思想!2四:原理及算法描述:1.基本原理:用户利用联机命令接口实现与机器的交互时,先在终端的键盘上打入所需的命令,由终端处理程序接受该命令,并将它显示在终端屏幕上。当一条命令输入完后,由命令解释程序对命令进行分析,然后执行相应命令的处理程序。2.算法描述:(1)存贮输入的各命令参数voidstore_parameter(char*buffer,char*parameter[10],int*para_num)说明:将输入的命令一条一条存储parameter[10]中,最大允许的参数个数为10个。算法描述:为buffer设置一个指针buffer_point,如果该指针向下移动,碰到空格,继续向下移动,直到遇到字符,读进各存储变量中parameter[10],最后如果遇到’\0’,则结束。(2)浏览一个路径下的目录和文件voidmy_dir(char*a[],int*num)说明:该命令只能显示当前目录中的文件和子目录和当前目录中子目录中的文件和子目录。并无如Windows中命令参数如此丰富。主要是考虑其复杂性,予以简化了。算法描述:如果只接受到mydir命令,后面并无其他参数时,显示当前目录下文件和子目录。如果接受到两个参数,如果第二个参数(表示当前目录中子目录)存在,则显示该目录下文件和子目录,如果不存在,则报错。(3)删除一个存在的目录,如果不存在,删除失败!voidmy_rd(char*a[],int*num)算法描述:如果该目录存在且为空目录,则删除,否则失败。(4)打开一个存在的目录,如果不存在,打开失败!voidmy_cd(char*a[],int*num)算法描述:如果接受到两个参数,第二个参数表示要打开的目录。如果该目录存在,则成功,否则失败。(5)创建一个目录voidmy_md(char*a[],int*num)算法描述:如果接受到两个参数,第二个参数表示要建立的目录。如果存在该目录,失败,否则成功。(6)删除一个存在的文件,如果不存在,删除文件失败!voidmy_del(char*a[],int*num)算法描述:如果接受到两个参数,第二个参数表示要删除的文件。如果该文件存在,则删除成功,否则失败。(7)移动一个存在的文件,否则,移动失败voidmy_move(char*a[],int*num)操作系统课程设计报告作者:半童合肥工业大学独立之精神,自由之思想!3算法描述:如果接受到三个参数,其中第二个参数表示存在的文件或目录,第三个参数表示将要移动到的参数。如果第二个参数不存在,则失败,存在,成功。(8)重命名一个已经存在的文件,否则,重命名失败!voidmy_ren(char*a[],int*num)算法描述:如果接受到三个参数,其中第二个参数表示将要重命名的目录或文件,第三个参数表示将要重命名的新的名字。(9)拷贝文件voidmy_xcopy(char*a[],int*num)算法描述:如果接受到三个参数,其中第二个参数表示存在的目录或文件,第三个表示将要拷贝成的目录或文件。(10)显示系统的时间voidmy_time(char*a[],int*num)算法描述:如果接受到一个参数,调用系统的时间函数,参数正确则输出系统时间。(11)显示系统的日期voidmy_date(char*a[],int*num)算法描述:如果接受到一个参数,调用系统的日期函数,参数正确则输出当时日期。(12)对文本内容进行分类voidmy_sort(char*a[],int*num)算法描述:如果接受到两个参数,第二个参数表示要分类的文本文档。如果该文件存在,则分类成功,否则失败。(13)逐步分屏显示文本内容voidmy_more(char*a[],int*num)算法描述:如果接受到两个参数,第二个参数表示要分屏显示的文本文档。如果该文件存在,则分屏显示成功,否则失败。(14)显示文本内容voidmy_type(char*a[],int*num)算法描述:如果接受到两个参数,第二个参数表示要显示的文本文档。如果该文件存在,则显示成功,否则失败。(15)清除屏幕显示voidmy_cls(char*a[],int*num)算法描述:如果接受到一个参数,调用系统的清屏函数,参数正确则清除屏幕的输入输出。(16)退出,后面可带退出参数voidmy_exit(char*a[],int*num)算法描述:可以接受小于10个的参数,其中第一个参数表示退出。后面几个参数一起表示输出的信息。五.设计思路描述:1.本课程设计调用到的API函数有:操作系统课程设计报告作者:半童合肥工业大学独立之精神,自由之思想!4(1)typedefstruct_WIN32_FIND_DATA{DWORDdwFileAttributes;FILETIMEftCreationTime;FILETIMEftLastAccessTime;FILETIMEftLastWriteTime;DWORDnFileSizeHigh;DWORDnFileSizeLow;DWORDdwOID;TCHARcFileName[MAX_PATH];}WIN32_FIND_DATA;该结构存放着所找到文件的详细信息,通过第一个字段,我们可以判断找到的文件是目录还是文件,通过cFileName可以获得该文件的文件名,继而可以对找到的文件进行操作。(2)HANDLEFindFirstFile(LPCTSTRlpFileName,LPWIN32_FIND_DATAlpFindFileData);根据文件名查找文件,如执行成功,返回一个搜索句柄。如果出错,返回一个INVALID_HANDLE_VALUE常数。应该用FindClose函数关闭这个句柄。(3)BOOLFindNextFile(HANDLEhFindFile,LPWIN32_FIND_DATAlpFindFileData);该函数根据调用FindFirstFile函数返回的句柄查找下一个文件,返回值非零表示成功,零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES。(4)BOOLFindClose(HANDLEhFindFile);该函数用来关闭FindFirstFile函数创建的一个搜索句柄。(5)HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDispostion,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);该函数创建,打开,或截取一个文件。它返回一个对象访问句柄。也可以返回和打开一个目录句柄。(6)BOOLGetFileTime(HANDLEhFile,LPFILETIMElpCreationTime,LPFILETIMElpLastAccessTime,LPFILETIMElpLastWriteTime);该函数得到一个文件创建,最近访问,最近修改日期,时间。(7)GetCurrentDirectory(DWORDnBufferLength,LPWSTRlpBuffer);该函数得到当前目录,存放在lpBuffer中。(8)BOOLRemoveDirectory(LPCTSTRlpPathName);该函数一个存在的空目录。(9)BOOLSetCurrentDirectory(LPCWSTRlpPathName);该函数设置当前目录。(10BOOLCreateDirectory(LPCTSTRlpPathName,LPSECURITY_ATTRIBUTESlpSecurityAttributes);该函数创建一个新目录。如果该文件存在,创建失败。(11)BOOLDeleteFile(LPCTSTRlpFileName);该函数删除一个存在的文件。(12)BOOLMoveFile(LPCTSTRlpExistingFileName,LPCTSTRlpNewFileName);该函数移动或重命名一个文件或目录(不管这个目录里是否由子目录或文件)。(13)BOOLCopyFile(LPCTSTRlpExistingFileName,LPCTSTRlpNewFileName,BOOLbFailIfExists);该函数拷贝一个存在的文件或新文件。操作系统课程设计报告作者:半童合肥工业大学独立之精神,自由之思想!5(14)BOOLTimeFile(LPCTSTRlpExistingFileName);该函数调用输出系统地时间。(15)BOOLDateFile(LPCTSTRlpExistingFileName);该函数调用输出系统地日期。(16)BOOLSortFile(LPCTSTRlpExistingFileName);该函数打开文本文档,将内容进行分类。(17)BOOLMoreFile(LPCTSTRlpExistingFileName);该函数打开文本文档,将内容进行分屏显示。(18)BOOLTypeFile(LPCTSTRlpExistingFileName);该函数打开文本文档,将内容进行显示。(19)BOOLClsFile(LPCTSTRlpExistingFileName);该函数清除屏幕输入输出的全部内容。2.重要算法:其实谈不上重要算法,只是对上述API函数的活学活用而已。其中我的my_dir(char*a[],int*num)函数要稍微复杂点。其中涉及到一个文件或目录时间日期的获取和转换,这点是需要注意的。在源程序中,我已经给出详细的注解。还有,最后结束时得关闭创建文件的句柄和搜索句柄。这点非常重要。3.流程图:操作系统课程设计报告作者:半童合肥工业大学独立之精神,自由之思想!6开始输入一个完整的命令parameter[0]==”mydir”or“MYDIR”执行my_dir()函数parameter[0]==”myrd”or“MYRD”执行my_rd()函数parameter[0]==”mycd”or”MYCD”执行my_cd()函数parameter[0]==”mymd”or”MYMD”执行my_md()函数parameter[0]==”mydel”or”MYDEL”执行my_
本文标题:Windows命令接口实验报告
链接地址:https://www.777doc.com/doc-5322945 .html