《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(8页珍藏版)》请在优知文库上搜索。
1、孝甫理N大亨广州汽车学院GuangzhouAutoCollegeSouthChinaUniversityofTechnology操作系统课程设计说明书在Linux环境下模拟实现命令解释器年级:08级专业班级:08级软件工程1班姓名:宋金骥学号:200830912071班内序号:46一.程序概述L你的源程序及可执行程序保存在效劳器上的路径(此项不写清楚的必定要参加辩论)当输入.a.out的时候源程序的执行结果就显示如上图,这时候已经进入了该程序,输入命令“pwd”系统那么显示出源程序保存在效劳器上的路径为:home08446显然可知可执行程序也与源程序保存的路径一样。2.完成的功能本程序在不使用
2、system0系统调用的前提下实现了某些LinUX环境下的系统自带功能,如:1、PWd命令是显示当前所在目录的路径名。输入格式:PWd2、dir命令是列出指定目录名中的所有目录及文件。输入格式:dir输入格式:cd目录名或路径 输入格式:new 目录名输入格式:deldir目录名输入格式:exit3、Cd命令是改变当前工作目录。4、newdir命令是新建所输入的目录。5、deldir命令是删除所输入的目录。6、exit命令是退出命令解释程序二概念原理该命令解析器程序运用了C+与C语言相结合完成了题目所要求的几种功能,并充分调用了外部函数实现各项功能。如下是程序中运用较为重要的几个函数:1、在P
3、Wd函数里用到了getcwd()函数,该函数原型为:char*_getcwd(char*buffer,intmaxlen);功能:获取当前工作目录。参数说明:_getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。所以需要显示当前所在目录的路径名只需要运用getcwd)函数就能直接获取出来。2、在dir()函数里用到了OPendirO函数,该函数原型为:DIR*opendir(constchar*path);功能:翻开一个目录。该函数的使用方便程序翻开当前目录或自己需要翻开的目录,如果翻开失败返回值为-1。3、readdir
4、()函数语法:structdirent*readdir(DIR*dir_handle);返回值:dirent结构函数种类:文件存取内容说明:本函数用来读取目录。返回是dirent结构体指针。4、closedir()是关闭目录句柄的函数,voidclosedir(resource$dir_handle)关闭由dir_handle指定的目录流。流必须之前被OPendir()所翻开。opendir()readdir()CIOSedir()三个函数的作用可以理解为当程序读取dir()函数的时候翻开当前的工作目录然后依次读取目录信息最后输出目录信息,三者都缺一不可,否那么不能完整的输出该目录的信息。5、
5、在cd()函数里用到了Chdir0函数,Chdir是C语言中的一个系统调用函数(同Cd)函数名称:_chdir(在TC2.0下可以写作chdir)功能:改变当前工作目录头文件:direct.h(在TC2.0下为dir.h)用法:int_chdir(constchar*path);返回值:成功返回O,失败返回-1当成功改变当前目录时那么返回0,假设目录不存在或改变不成功时返回-1。6、在新建目录函数newdirO里有一个重要的创立目录函数mkdir(),该函数的头文件库:#include#include函数原型:intmkdir(constchar*pathname,mode_tmode);函数
6、说明:mkdir()函数以mode方式创立一个以参数pathname命名的目录,mode定义新创立目录的权限。返回值:假设目录创立成功,那么返回0;否那么返回-1,并将错误记录到全局变量ermo中。7、与新建目录函数用法相同但意义相反的是在删除函数deldirO里的rmdir(),该函数名称:_rmdir(TC下为rmdir函数原型:int_rmdir(constchar*dimame);函数功能:删除一个目录,假设成功那么返回0,否那么返回-1。题目要求实现的根本命令已经实现,由于有些不懂的函数是在网上查询而来的所以该程序写法看上去有点乱,但分布有条理,让人看上去通俗易懂。还有就是该程序的登
7、录界面十分简洁,没有花大量的功夫在主登录界面的排版上,看上去显得很草率。四.详细设计程序的每个功能都有由一个函数来实现,而函数里面有许多调用外部的函数需要在网上寻找它们的用法。 voidpwd()chara300;getcwd(a,300);coutaendl;)getcwd()函数返回当前目录。假设成功,那么返回当前工作目录,否那么返回falseo 在intdir()函数中:Printf(输入要进入的目录名,输入.为查看当前目录n)scanf(%s,m);if(strcmp(u.,m)=0)如果命令不带参数dir=opendir(,.);/翻开当前工作目录dir=opendir(m);翻开需
8、要翻开的目录当输入了dir后屏幕那么出现“输入要进入的目录名,输入.为查看当前目录”这些字,如果要查看当前目录那么直接键入回车屏幕显示出当前目录。如果需要进入其他目录那么输入dir后再键入您所需要进入的目录名称即可。Printf(翻开目录失败!r);return-1;/opendir()函数的失败返回值为-1)readdir0读取目录信息closedir0是关闭目录句柄的函数,流必须之前被opendir()所翻开。在cd()函数中:调用了Chdir()函数目的是改变当前工作目录。scanf(,%s,ab);if(chdir(ab)=-l)改变目录并判断是否失败(coutu目录不存在!endl;
9、return-1;)elseCOlltVV改变目录成功vendl;return0;但程序成功改变目录那么返回0,改变目录失败那么返回-1。在newdir()与deldir()两个函数中分别运用了mkdir()ITndir()来实现目录的创立与删除功能,该函数的用法是在网上学习而来的,其中在mkdir(n,0777)中的0777是一个权限设置,默认的mkdir是0777,意味着最大可能的访问权。voidkris()(cout200930111016$;)该函数是完成题目要求的命令介绍程序提示符为:姓名拼音在main()主函数中:while(l)(scanf(,%s,n);if(strcmp(n,
10、exit,)=O)exit(l);elseif(strcmp(n,pwd)=O)(pwd();kris();)if(strcmp(n,dir,)=O)dir();kris();)if(strcmp(n,cd)=O)(cd();kris();1if(strcmp(n,unewdir)=O)(newdir();kris();if(strcmp(n,deldir,)=O)(deldir();kris();)该主函数运用了简单了if语句来完成最后的系统调用,从而到达了各个命令的功能。五.使用情况1、当输入./a.out后那么进入该命令解析器,如下列图为该解析器的首界面。按照首界面的提示输入PWd后那么
11、显示当前所在目录的路径名。2、当输入dir后那么屏幕显示如下列图1,如果要查看当前目录就需要输入”.”回车后如下列图2显示出当前目录中的所有目录及文件。IsongJinji)$dir输入要进入的目录名,输入为查看当前目录人要进入的目录名,输入为查看当前目录3、输入cd目录名或路径那么改变目录成功,键入PWd即可查看到当前目录已经改变。*.outJinwesong.cpp(songJinJiO$cdJin改变目录成功IsongjinJ10$pwdhoge08446jin4、输入newdir目录名为新建一个目录,该目录名称为您所输入的目录名。如图我新建了一个名为jjj的目录,新建成功后键入dir那
12、么查询到刚刚新建的目录。a.outJinWesong.cpp1(sonsJInJWKnewdIrJJJ新建目录成功!CsongjinjiP)$dir华人曼迸入的目录名,输入.为查看当前目录Jjja.outJinwesong.cpp(songjinji$IjjJa.outJin wesong.cpp5、输入deldir目录名为删除您所输入的目录。如图我删除名为jin的目录,删除成功后键入dir那么找不到刚刚删除的目录。说明删除成功。(SongjlnJieHdeldiPJin删除目录成功!(SongjinjieKdii-输入,进入M目录名,输入.为查看当前目录六.设计总结JJJ a-outweso
13、ng.cpp1 .遇到的困难及解决的问题:此次课程设计其实在一开始编写输出当前路径的函数的时候就觉得有困难,但后来想想可以直接调用外部的函数到达与PWd相同功能即可,这样一来后面的思路就迎刃而解了,许多功能直接调用外部的函数即可实现所需要的功能,只是那些用法需要自己在书上或网上揣摩。2 .总结与感想:通过这次课程设计,我确实学到了很多东西,多年后我可能已经忘记这次课设最后打了多少分,但这些学到的东西却可以使我受益终生。除了知识技术上的东西,我更锻炼了自己的快速学习能力;我学会了如何快速有效地从图书馆、网络获取自己需要的信息。同时这次设计给我们很大收获,使我们对操作系统的根本知识和根本命令有了进一步的提高,能让我们更早的适应社会。七.参考文献1、百度百科2、LinuxC函数实例速查手册