操作系统课程设计报告_第1页
操作系统课程设计报告_第2页
操作系统课程设计报告_第3页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

件亠對夢払求学览课程设计说明书设计名称: 操作系统课程设计 题目: 文件访问接口设计 学生: 小浪 专 业: 计算机科学与技术班级:12级1班 学 号: 2012314118指导教师: 任朝晖 日期:2014年9月A5_日件山科于捷求于毙课程设计任务书计算机科学与技术设计题目文件访问接口设计主要容专业 年级 班利用C语言设计,具体包括:1、 基本文件容输入2、 基本文件容输出3、 创建文件4、 打开文件5、 关闭文件6、 文件缓冲区管理7、 文件句柄管理&读顺序文件9、 写顺序文件10、 读随机文件11、 写随机文件12、 文本文件操作验证程序上述功能由两部分程序验证,中断驻留程序和验证程序。首先运行中断驻留程序,然后运行验证程序得到预期结果。三、 具体要求本设计的目的是通过BIOS调用设计简单的文件访问接口,使学生掌握程序接口的设计方法。要求学生在熟悉比BIOS、DOS操作系统的中断接口及程序接口的基础上,利用 C语言设计简单的文件访问接口,最后通过程序验证接口的正确性。四、 进度安排依照教学计划,课程设计时间为: 2周。1.要求讲解、资料查找、系统分析,概要设计(2天)2.系统详细设计、功能设计(2天)3.算法实现、编程调试(5天)4.功能演示、资料整理、课程设计说明书编写。(1天)五、完成后应上交的材料课程设计说明书纸质文档六、总评成绩指导教师 签名日期 年月日系主任 审核日期 年 月 日目录TOC\o"1-5"\h\z\o"CurrentDocument"一、程序概述 11.1完成的任务 11.2解决的问题 错误!未定义书签。\o"CurrentDocument"二、 概念原理 12.1基本概念 1\o"CurrentDocument"2.2基本原理 2\o"CurrentDocument"三、 总体设计 2\o"CurrentDocument"3.1实现方法 23.2技术路线 3\o"CurrentDocument"四、 详细设计 34.1主要函数 34.2引用函数 错误!未定义书签。\o"CurrentDocument"五、 完成情况 3\o"CurrentDocument"六、 使用说明 4\o"CurrentDocument"七、 设计总结 1\o"CurrentDocument"7.1系统特色 26\o"CurrentDocument"7.2经验教训 27\o"CurrentDocument"7.3实践感受 27参考资料 28附录 29一、 程序概述1.1完成的任务本设计要求编写一个简单的文件访问接口设计,利用 C语言,DOS,BIOS中断调用进行设计。主要完成要求中所提到的功能如:创建文件,删除文件,打开文件,关闭文件,基本文件容输入,基本文件容输出,读顺序文件,写顺序文件,文本文件操作验证程序,文件缓冲区管理 的实现。1.2解决的问题在设计过程主要遇到了以下的问题:一是关于中断的理解,二是在理解了中断的意义之后,进行中断函数如int86(),int86x(),intdos(),intdos() 等函数的调用不是很清晰。解决的过程:通过与同学讨论,在网上查阅了相关的书籍和学过的课本,如《 C高级实用设计》以及《80x86汇编语言程序设计》之后,便有了比较清晰的思路。有关函数的调用参数的设计,基本上是基于这些:结构体WORDREGS,BYTEREGS,SRIK合体REGS,文件属性字节,以及汇编语言中int21Hdos系统功能调用中中断类型(主要是21H)以及调用功能号的查询和设置。下面主要介绍上述提及的几个结构体跟联合体://以字作为单位的寄存器所组合的结构体StructWORDREGS{Unsignedintax,bx,cx,dx,si,di,cflag,flags;};//以字节作为单位的寄存器做组合的结构体StructBYTEREGS{Unsignedcharal,ah,bl,bh,cl,ch,dl,dh;};//由上述两个结构体所组合的共用体(联合体)UnionREGS{StructWORDREGSx;StructBYTEREGSh;};//由段寄存器组合的结构体StructSREGS{Unsignedintes,cs,ss,ds;};二、 概念原理2.1基本概念中断中断:顾名思义,是指当出现需要时, CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由 CPU立即处理的情况,此时, CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。本课题中涉及的为 dos中断跟bios中断。文件访问接口所谓访问接口,实际上即为用户通过 dos状态下的提示,键入相关命令后,作为访问相关文件操作的中介,即类似一个中转站。而系统同时也需要在响应了用户键入的命令后执行预先编写好的相应程序,并将程序的执行结果通过中介,即文件访问接口,输出给用户。而事实上在系统响应一次用户的命令时,系统进行了一次10中断。中断驻留程序中断驻留程序,指的是当加载进存的程序执行完毕后,依然能够保存产生的临时数据跟临时状态,而在下一次调用时继续执行。验证程序本课题的验证程序,指的是,当用dos,bios中断调用编写好相关用于文件访问的函数并执行之后,用C语言高级的函数如 fopen(),fprintf(),fgetc(),fclose() 等函数来验证上述编写的访问函数是否可行。本课题中用 fopen(),fclose() 来验证用dos中断调用所编写的函数CloseFile(),CreateFile()和CloseFile();用fgetc(),fprintf() 等函数来验证用dos中断调用所编写的WriteToFile()和ReadFromFile()函数;除此之外,像ftell(),fseek() 等的验证是同样的道理。只需基于上述由dos,bios中断调用所编写的函数•系统调用系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个核与用户空间程序交互的接口, 它好比一个中间人,把用户进程的请求传达给核,待核把请求处理完毕后再将处理结果送回给用户空间。2.2基本原理本课题的运行结果,首先是在运行开始时给定了 10个选择开关,供用户选择,每当接收一次用户的选择时,系统将进行一次的 10中断,之后执行相应的中断服务程序,在这里是指由 dos,bios中断调用编写好的函数,调用结束时,将临时结果保存,并退出中断,继续响应用户的选择,直到用户选择了退出。如下图所示:三、总体设计3.1实现方法程序通过选择开关switch...case将用dos,bios调用编写的函数组合起来供用户做出选择。在对应处理用户的选择编写的函数中,主要的核心是 dos功能中断调用函数的编写,其中包括中断类型号,中断功能调用号等的设置,以及响应用户选择后中断服务程序的编写。另外,可以通过参看当前工作目录下的文件信息或者通过 Validate开头的相关函数进行程序运行结果的验证3.2技术路线整个程序的设计流程,围绕着 bios,dos功能中断调用这一主线,编写好相关文件操作函数,在响应用户选择之后,对应执行相关的函数四、 详细设计4.1主要函数IntOperOfSel():用于显示可供用户选择的功能,并提示用户作出相应的功能选择VoidCreateFile(charfilename[80]):用于创建一个新的文件:根据用户输入的文件名进行文件的创建,如果文件创建失败 :如磁盘空间已满或者已经存在该文件,即创建失败IntDeleteFile(charfilename[80]):用于删除一个文件,如果删除成功,将返回文件代号,否则删除失败:可能是不存在该文件IntOpenFile(charfilename[80]):用于打开一个文件,如果打开成功,则返回文件代号,否则打开失败,可能是不存在该文件VoidCloseFile(filename[80]):用于关闭一个文件VoidWriteToFile(filename[80]):用于写顺序文件 基本文件容的输入以及文件缓冲区的管理:首先根据用户输入的文件名打开一个文件,如果存在该文件,则打开成功,开始写入容,此时继续接受用户输入的容,注意,输入直到用户键入回车键即表示输入完毕,此时将输入的容根据文件缓冲区管理规则将用户输入的容进行存储至指定文件名的文件中VoidReadFromFile(filename[80]):用于读顺序文件 基本文件容的输出 以及文件缓冲区的管理:从指定的文件中读取文件中的容,并输出;VoidValidateOpenFile(charfilename[80]):用于验证上述文件访问函数编写的正确性:用于验证创建文件 打开文件是否成功VoidValidateReadFile(charfilename[80]):用于验证上述文件访问函数编写的正确性:用于验证上述中 WriteToFile(filename[80])以及ReadFromFile(filename[80]): 函数4.2引用函数Clrscr()用于清空屏幕的作用五、 完成情况本程序完成了其中的9项,能够实现文件的创建,打开,关闭,基本文件容的输入,输出,文件缓冲区的管理,以及文本文件的验证程序,写顺序文件,读顺序文件。因为对文件句柄以及写,读随机文件的理解不是很清晰,故而没有动手实践完成。另外,本程序在 dos下进行演示,需要根据提示来进行输入,不允许用户胡乱的输入,不然有可能程序处理不了,即本程序在某种程度上还不是很稳定,安全。但从理论上的角度上讲,只要操作合理,那么本程序将可以实现对应的功能。

六、使用说明运行成功后进行首页,开始接受用户的选择暂|TurbaC-n-一01213叫516718110一 一01213叫516718110一ExitCreateonewfileDeleteaex1stingf1leOpen也iex1stin^fileCloseanex1stIngfHeInputbas1ceohtehtstoexIngfileOutputbasiccontentsfromexistIngfile^Tovalidatetheflie13op«nornotTova11datethereadingcontent5fromfileClejanthescreenionOfSelection-*-****^---*■ InputYourSelctLoni:._接着进行相应功能选项前面对应数字的输入,在这里以 1,5,6,10为例,其他为同样的道理1:为创建一个新的文件ingfkleromex1-31Ingfileopenornotcontenitifromfile1-3i1toer&§tefile:Fest-txt卜&ingfkleromex1-31Ingfileopenornotcontenitifromfile1-3i1toer&§tefile:Fest-txt卜&fihasbenn@x£§t Inputthenameofrilet□create;Test.tictSelectionOfGreat1ngANewFile*-IripurtVcurSelction^1FunetIonOfSelectlon^- -=*"*«*--^--FunctionOfSelectioni^=—lefileFunctIonOFSelection---^-----0Exit1Cr#atvaC■叫file8eleteaexistLngfilepena tingrile4Close pmistingfile5Inpyt centent^t#6Outputba^1ceonit.entsf7Tovilidatethefileit8Tovalidatethereading10Cleanthescreen!01294S67ExitCiru日teaneiwfileDeleteaexist1r>gfileOpenaex11t1ngfileCloseanexistinrgfile1npu>tbaaicconient&tosiMiatiOutputb弟i匸contentsfromext TcjvalIdi^tethefileImopenornotTovalidatethereadingcontentsFromf1leCl<«ntheserter^表示test.txt 文件已经存在,故而创建失败 查看目录,果然已经存在了 test.txt, 故而提示创建失败l?TcrT-L125TXTrrt--鼻uE3■|fjIDPMIMfDPMJRE5.EMSTESl.CRERCDGREPMSMJDLLEXfeEDMMBJEXEEE3Bl'NEwnnXTasx^U£tmtbSsjeC«JMAJfETSOF胡輕ERDC區]II]njl]■匚3RIZVWJCPFJCFG.E^PRjcm1ASM2M5「匚EXEEJS£GutXLTCKB9SW? ■iM5■C-XUlb,TCjOLlSCIHCLJmJB-*■■smm&r.cijCKCLEHE里]C7RjC:.fFTKEOBJ[FHBC.EAK為SNfTBtCFPra4anTB^cBJ!■VTBCX.BAKNEWIJ.TS3NCNiME-MONAMES]WONAMFXT30JLXLoaCMUfflTCrciKKM.STCDGDLSTCD002.5WWPwTLJJi^Sii]RJ■JCPP.EXEODDr®Mzli5ETOM.7-PMTIN7TExtcpwim&exE盲il刮INTKtCFINTBfiX.EXiNTaaxo:MTSEXSE.INTaCiXSE.rELIBMCWKJ凰KJ蛊,miFEFCCWIONE珈號ONE,CPffOMEFKOWOBJTCKEB^7EOMHLSICODOSJ;TCDDCHSTCHKK7JEWPTUJWP4九沁FCM225TCJX323S亠…-OMTCC-EH:7CCONFK5JCTBEFER1151Co口口yjxsIffil匸1XETURQOCCFC肋 WP WPjMJP.LkIKDEIJJSrciioui.swP-TH諷二宝£VifTCOftlfi.SWfrcoai7.<iwTLiKiai曲ICiOlSuSWPTCct?20j=.WP■J121■[1气rs13TCDEF-tXETCHEFT匚TDUMP.EXrEMC£XE1f&T,TXTfflELPXHjTHEUP.roH E MTUBfJ®再次执行1号功能选择:newfile.txt 创建成功Funcflon^O?-SelectTomFuncflon^O?-SelectTom01234567&1SelectionOfCreatingANe*Flie01234567&1SelectionOfCreatingANe*FlieExitCreateanewf1leDeleteaexi31ingfileOpenaeKistfileC1oseanexistingfileInputbasiccontentstoex1stingf1leOutputbesicconten电■F广口帕exlvtingfileTovslidatethefileisopenornotTovalldatethereadJlngcontent3frofnfileC1earnthescFffenionOfSelecti口InputYourSelction?1-Incuttnena^neoftiletocreate:Hp&wf1Je„tsctTheFile門屈五b«nneMistec=---Fai1tocreatefile:TheFile門屈五b«nneMistec一 FunctloriOfSelecticn 567alExitCreste567alExitCrestennewfileDeleteaexis11ngFilOpenaex1stIngfkleClosiB-anexis11nsFi1Inputbaslccontent3Outpurtba?icesntentsTavs!IdatethefileTovalidatethereadiCleanthescreeneetoexlutingf1leFromexistIngfileIsopenornotngcontentsfflie FunctOfSelection **InputYourSeictlo查看目录下,果然创建了 newfile.txt备廿艺程序12.TKT125.TKTBUILTINS.MAKC1RCLEFI.B

AKDPM1ME

M-DLLUDPMJRES,EXEEMSTEST.COMEGREP.COMGREP2MSG.EXE[NT86启AK77?I1NT86.CPPCIRCLEFTCPP1NT8&.OSJIlJiINTB6XSE.EXEPRJ2MAK.TCOOOS.SWPTCOQ22,SWPETUNK.EXEJNT85XSE.OBJMAKE.EXEMAKER.EX

ENEW.TXTNEWF1LE.T

XTNONAME□0.EXENONAMEOO.OBJPRJCFG.EXPRJCNVT.EXETA^M2MSG.EXETC.EXETCOOOO.STCOO01.SWP WPTC0009.SWPTGOO23.S

WPTOUCH.COMTC0010.S

WPTCOO1LSWPTC0012.SWPTCO013.SWPT匚0014.STC0015.SWP WPTCCEXETRAN匚OP'f.EXETCCONFTGTCDEF,DPTCDEF.DSTCDEF.EXETCHELP.TCHTRIGRAPHEXETURBOCCFGUNZ1P.EXE进行10号功能的选择 PuhctionOfSelectlorf ■■■012亘012亘4567810CfTC;■已teanewfile«"»i&tingfile

romex1stIngf1openornot匚ontentvfromDeletcaewi31IngfileOpe-naexistingfileanexistingrileis«"»i&tingfile

romex1stIngf1openornot匚ontentvfromTovalid*tetheread!ngCleanthescreen --FunetIonOfSelectIon ■---InputYourSelction:10结果将出现清空屏幕的效果T」ri»UFunctionOfSelection-- ExitCreateanewfileDel«t«a:e)cl«tlogflieOpen«#x1»ti.ngfLieClceean^xistingfileInputMsleenntenitstoexistingfileOutputbaaLccontrntisfrom-exiatingfileTovalidstethef1leisopenornotTovalid'stethereadingcontentsfromfileCleanth色screenFwnctionOfSelection-----■、-■-----InputYourSelction:

进行5号功能的选择:5TjiLl=== deanOfSelect二二乞二=二整二=三01234S67.10CreateaneuifiJclete□&kJlstingf1leOpenaeMiltingFile=== deanOfSelect二二乞二=二整二=三01234S67.10CreateaneuifiJclete□&kJlstingf1leOpenaeMiltingFileClaseanexistingf1InputiccontentstoexistIngfileOutputba3iccontentafremexistingfileTavalidateth®f1Le1$openornotTovalidatethereadingeontentsfromfileCleanthescreen FunetionOfSelection-—-- InputYourSeLetion;5------TheSelectionOfUrittingBasicContentsTcFileInputIneNameOfWrittIngFile:test.txt----InputThsNrittingContenta;V11gotoAmericaonedayJT!AtthattimeIwillbestrongwerThenumbw厂ofcontentsyouhavewritetofileare:63-FunetionOfSelectionExitCreate日newfiledeleteaexistingflleCpsnaeKistin^fileCloseancm1stIngf1leInputbaaiccontent3toOutputbssiccontentsfrTovalidatethefile13exiat1ngfileexistingfenornot输入成功,提示输入了多少个字符 ,上述统计了一下(包括字符)为63个在目录打开此文件,果然是写入了这些容文,叭文,叭F和環(曰^Q-互百(V.证帀旧:IJ11gotoAmericaoneday?!!AtThattimeIw:11beBTrongerF面进行6号功能的演示

9TiletIrrafilenotm+romfi1ExitCreateDeleteOpenaCloseInput泪TovalClean10 9TiletIrrafilenotm+romfi1ExitCreateDeleteOpenaCloseInput泪TovalClean10 TheContentsOfFile:test.txtAreListedBeloui:I111gotoAuricaonedayI11AtthattIwillb*rong»r=二=4三ThieSelectionOfReadingBasicContentsFremiFileInpu七Th碧NanneOfRe^d1n;giF丄le^teat.txtRchINumberOfReadChflrjiietersinfile?test-txt!63nputfQurSeiciio-n-6Funct1on0+Se1ectionrunictionOfSelection-- t«■■e-*r弓日空c*7■贯-FurietionOfSelection- e__n^bddhabatorT3geetin11s^lielstcdfIft_R1ainei巳eOF9#tfr1nntnoeechh11上述的演示结果 正好符合了其中的要求其他的功能演示也是同样的道理七、设计总结7.1系统特色在本系统中已初步实现一个可访问的文件接口, 能够正常的解析命令并执行, 在解析命令方面,采用中断函数调用以及功能类型号选择设置的形式,达到直接与底层“打交道”的作用,效率高7.2经验教训在编程过程中要多使用库函数中自带的容, 不必另外再去编写已有的功能, 这样不仅能节省时间, 也能提高程序的可靠性。要多了解库函数,可以阅读相应的帮助文件来获得有用的信息。遇到问题多与老师同学讨论,可以帮助自己跳出思维定势。7.3实践感受每次的课程设计都是对我们所学知识的一个深化, 在实践过程中能遇到许多的问题, 遇到问题分析问题解决问题,这样对知识的理解得到一个升华。实践过程中学到的都是印象非常深刻的,所以以后要多参加这样的实践,认真对待每一次机会。本次的课程设计,其实从某种程度上来说,还是挺有难度的,因为,之前对于 C语言的了解是通过其高级函数的,如文件的访问中,正是通过其高级函数来访问的。 刚开始还不知所措,网上的介绍也很模糊,根本很难找到有关dos中断进行文件访问接口的相关设计。后来在于伙伴的讨论下,知道了 C高级实用设计这本书,从次书中受益匪浅,加上 80x86汇编语言程序设计,更是增长了自己对于汇编的见识,从此更加肯定了汇编在底层操纵的作用!而且通过此次的课程设计,认识了讨论的重要性,我个人觉得编码正是如此,如果遇到了一个人难以解决,那么最好是提出来与伙伴或者同学一同探讨,这不但能直到别人的向想法,更能让自己认识自己的不足,更有甚者,能够增长自己的见识! !!!!参考资料1《计算机操作系统教程》(第2版)尧学史美林编著清华大学2、 《操作系统实验指导》任爱华鹏方毅清华大学科学3、 《操作系统实验教程一一核心技术与编程实例》顾宝根 王立松顾喜梅科学4、 《80x86汇编语言程序设计》美明,温冬婵编著,清华大学5、 、《C高级实用程序设计》王世元编著清华大学6、《C语言程序设计》谭浩强编著清华大学附录:源代码<在TurboC3.0环境>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<process.h>#include<dos.h>#include<bios.h>//Thenumberoftypeofinterrupt#defineINTER0x21//Thesizeoffilename#defineNum80//thenumberofcharacters#defineCNum9〃FunctionOfSelectionintOperOfSel(){〃clrscr();printf("\n\n\n\n FunctionOfSelection \n”);printf("\n0Exit\n1Createanewfile\n2Deleteaexistingfile");printf("\n3Openaexistingfile\n4Closeanexistingfile");printf("\n5Inputbasiccontentstoexistingfile");printf("\n6Outputbasiccontentsfromexistingfile");printf("\n7Tovalidatethefileisopenornot");printf("\n8Tovalidatethereadingcontentsfromfile");//printf("\n9Tovalidatethewrittingcontentstofile");printf("\n10Cleanthescreen");printf("\n\n FunctionOfSelection \n");intsel;printf("\n InputYourSelction:");scanf("%d",&sel);returnsel;}//CreateanewfilevoidCreateFile(charfilename[80]){unionREGSinregs,outregs;structSREGSsegregs;//Thefunctionnumberofcreatefileis5Bsegregs.ds=FP_SEG(filename);//Settheattributeoffileint86x(INTER,&inregs,&outregs,&segregs);{printf("\n FailToCreateNewFile \n");return;{printf("\n——Failtocreatefile:%sThefilehasbennexisted——-\n",filename);return;}Successfully!The File'sAttributeprintf("\n----Create NewFile:%sSuccessfully!The File'sAttributeis:%d——printf(" //DeleteaexistfileintDeleteFile(charfilename[80]){unionREGSinregs,outregs;structSREGSsegregs;intdosx(&inregs,&outregs,&segregs);returnresult;}//OpenanexistingfileintOpenFile(charfilename[80]){unionREGSinregs,outregs;structSREGSsegregs;intresult;segregs.ds=FP_SEG(filename);//Setthewaytoaccessfileint86x(INTER,&inregs,&outregs,&segregs);//YouCanThroughCreateFile()ToKnowTheFileCodeastest//printf("Successfullyopenfile:%{printf("\n FailToOpenTheFile:%sMaynotexist\n",filename);}else{ls:%d\n",filename,outregs.x.ax);printf("\n----Successfully OpeningTheFile:%sTheFileCodels:%d\n",filename,outregs.x.ax);}*/returnresult;}//CloseTheExistingFilevoidCloseFile(charfilename[80]){unionREGSinregs,outregs;structSREGSsegregs;intresult;intFileCode;//ToCloseTheFile:segregs.ds=FP_SEG(filename);//Setthewaytoaccessfileint86x(INTER,&inregs,&outregs,&segregs);//YouCanThroughCreateFile()ToKnowTheFileCodeastest//printf("Successfullyopenfile:%{printf("\n FailToOpenTheFile:%sMaynotexist\n",filename);}else{}*/if(2==result){//printf("\n Openthefile:%sFailly!Itmaynotexist \n",filename);printf("\n Failtoclosethefile:%sItmaynotexist \n",filename);}else{//printf("\n Open thefile:%sSuccessfully!Nowthefilewillbeclose----\n",filename);intrel=intdos(&inregs,&outregs);printf("\n——CloseFile:%sSuccessfully!rel=%d——\n",filename,rel);}}//InputContentsToExistingFilevoidWriteToFile(charfilename[80]){unionREGSinregs,outregs;structSREGSsegregs;intresult;intFileCode;charWriteContents[CNum];int86x(INTER,&inregs,&outregs,&segregs);if(2==result){printf("\n---Cannotinputcontentstofile:%s!Itmaynotexist -\n",filename);}else{thefile:%sSuccessfully!Nowthefilewillbeclose----\n",filename);//printf("\n Openthefile:%sSuccessfully!Nowthefilewillbeclose----\n",filename);// VeryImportantHere:ToAbosrbTheEnterKeyCode;getchar();printf("\n\n----lnputTheWrittingContents:\n");/*gets(WriteContents);〃printf("WriteContents:%s\n",WriteContents);〃intCharNum=0,i=0;inti=0;while(WriteContents[i]!='\O'){〃CharNum++;i++;}*/intcount=0;//printf("CharNum=%di=%d\n",CharNum,i);//printf("i=%d\n",i);inttemp=0;intsumChar=0;for(inti=0;i<=CNum-1;i++){//WriteContents[i]=getchar();//WriteContents[i]='';if(count==1){WriteContents[i]=temp;i++;count=0;scanf("%c",&WriteContents[i]);if(WriteContents[i]=='\n'){〃printf("i=%d\n",i);break;}//if(WriteContents[i]=='\n')endif(i==CNum-1){〃getchar();//printf("HelloWorld\n");//return;FileCode=result;segregs.ds=FP_SEG(WriteContents);//int86x(INTER,&inregs,&outregs,&segregs);intdosx(&inregs,&outregs,&segregs);/J(“u\“)#u!」d{!([f]sjuajuo9ajuM111o%11)Buucl}(++R!>R0=[lU!)JOj¥/J([|,]sjuajuo9aju/\A1[0]sjuajuo9aju/\A111u\o%=[L]sjuajuo9aju/\A□%=[0]sjuajuo9aju/\A11)Wuud//!(sjuajuo9ajuM111u\s%=sjuajuo9ajuM„)^uud//^aiueuai!)1,,^—MO|aqpa^siiajes%:a|ij40sjuajuoo0屮jojsajam-uyuvJ^uud///*{:[>|]s;ua;uo9a;u/\A=[^]s;ua;uogdiuai}(++*!>*0胡】U!)」Oj:[glsjuajuogdiua丄」Eip*/iapjio」ojpua//{址!]siu巩uoooi!」/\/VQ%“)HU!」d//Pue(8==!)4!//{!xexs6aj;no=+」eqgiunsA=!:L+lunoo=lunoo:[!]s;ua;uoga;u/\A=diua;!(Hu\p|JO/\AO|QH“)HU!」d〃!(xqxs6aju!111u\p%=xqxs6aju!11);nuud//!(xexs6aj;no111u\p%=xvei|imon.^uucI//〃printf("endforcirclei=%d\n",i);〃printf("WriteContents=%si=%d\n”,WriteContents,i);〃printf("i=%d\n",i);/*for(intj=O;j<i;j++){printf("%c",WriteContents[j]);}printf("\n");*/FileCode=result;segregs.ds=FP_SEG(WriteContents);//int86x(INTER,&inregs,&outregs,&segregs);intdosx(&inregs,&outregs,&segregs);printf("\n\n---Thenumberofcontentsyouhavewritetofileare:%d--\n",sumChar);//printf("i=%d\n",i);}//ReadContentsFromExistingFile;voidReadFromFile(charfilename[80]){unionREGSinregs,outregs;structSREGSsegregs;intresult;charReadContents[CNum*1024];intdosx(&inregs,&outregs,&segregs);if(2==result){Thefilemaynotprintf("\n---Can notreadcontentsfromfile: %sThefilemaynotexist \n",filename);}else{//printf("\n---NowI'llReadContentsFromFile:%s\n",filename);segregs.ds=FP_SEG(ReadContents);intdosx(&inregs,&outregs,&segregs);printf(”——RealNumberOfReadCharactersinfile:%s:〃printf("ReadContents=%s\n",ReadContents);printf("\n——TheContentsOfFile:%sAreListedBelow:\n",filename);{printf("%c",ReadContents[i]);}printf("\n");/*for(inti=0;i<1024;i++){printf("%c",ReadContents[i]);if(ReadContents[i]=='\0'){break;}}*//*inti=0;while(ReadContents[i]!=NULL){i++;}printf("i=%d\n",i);*//*for(intj=0;j<i-2;j++){printf("%c",ReadContents[j]);}printf("\n");*/}}//validatefunctionone:openfile:aftercreateonefile,youcanvalidatethe//fileisexistornot!voidValidateOpenFile(charfilename[80]){FILE*fp;fp=fopen(filename,"r");if(!fp){printf("\n——Openfile:%sFailly!failtovalidateopenfilefunction -\n",filename);return;}else{fileprintf("\n——Open file: %sSuccessfully!successtovalidate openfilefunction----\n",filename);}fclose(fp);//validatefunctiontwo:readfile:afterwrittingcontentstoonefile,youcan//validatethecontentswhetherithasbeenwrittentoitornot!!voidValidateReadFile(charfilename[80]){FILE*fp;fp=fopen(filename,"r");if(!fp)\n",filename);printf("\n Cannotreadcontentsfromfile:%sItmaynotexistreturn;\n",filename);}else{intcount=0;theprintf("\n----Read contentsfromfile:%ssuccessfully! Thebelowarethecontents----\n",filename);charch;while((ch=fgetc(fp))!=EOF){count++;printf("%c",ch);}//whileendprintf("\n");printf("\n——The totalnumberofcontentsofthefile:%sare:%d \n",filename,count);}//elseendfclose(fp);}//MainFunctionintmain(){clrscr();charCreateFileName[Num];charDeleteFileName[Num];charOpenFileName[Num];charCloseFileName[Num];charWrittingFileName[Num];charReadingFileName[Num];charValidateOpenFileName[Num];charValidateReadFileName[Num];intsel;〃printf("YourSelectionls:%d\n",sel);while(sel!=O)do{sel=OperOfSel();switch(sel){case0://printf("Select0Exit\n");printf("\n——Exitthesystem'n");exit(0);break;case1://printf("Select1\n”);printf("\n SelectionOfCreatingANewFile \n");printf("\n----Inputthenameoffiletocreate:");scanf("%s",CreateFileName);CreateFile(CreateFileName);break;case2://printf("Select2\n”);printf("\n SelectionOfDeletingAExistingFile \n");printf("\n----Inputthenameofexistingfiletodelete:");scanf("%s",DeleteFileName);//printf("DeleteFileNameis:%s",DeleteFileName);intRelOfDel=DeleteFile(DeleteFileName);if(0==RelOfDel){printf("\n TheFile:%shasbeendeletesuccessfully'n"QeleteFileName);}else{printf("\n——Cannotdeletethefile:%sItmaynotbeexist'n",DeleteFileName);}break;case3:printf("\n TheSelectionOfOpeninganExistingFile \n");printf("\n----Inputthenameofexistingopeningfile:");scanf("%s",OpenFileName);〃printf("\nOpenFileName=%s\n",OpenFileName);intRelOfOpenFile=OpenFile(OpenFileName);if(2==RelOfOpenFile){printf("\n FailToOpenTheFile:%sMaynotexist\n",OpenFileName);}else{FileCode//printf("\n----Successfully Opening TheFile: %s TheFileCodeprintf("\n----SuccessfullyOpeningTheFile:%s\n",OpenFileName);}break;case4:printf("\n TheSelectionOfClosinganExistingFile \n");printf("\n InputTheNameOfClosingFile:");scanf("%s",CloseFileName);〃printf("TheCloseFileName=%s\n"QoseFileName);CloseFile(CloseFileName);break;case5:printf("\n TheSelectionOfWrittingBasicContentsToFile -\n”);printf("----InputTheNameOfWrittingFile:");scanf("%s",WrittingFileName);〃printf("WrittingFileName=%s\n",WrittingFileName);WriteToFile(WrittingFileName);break;case6:printf("\n TheSelectionOfReadingBasicContentsFromFile \n");printf("——InputTheNameOfReadingFile:");scanf("%s",ReadingFileName);//printf("ReadingFileName=%s\n”,ReadingFileName);ReadFromFile(ReadingFileName);break;//printf("\n7Tovalidatethefileisopenornot");//printf("\n8Tovalidatethewrittingcontentstofile");//printf("\n9Tovalidatethereadingcontentsfromfile");case7:printf("\n TheSelectionOfvalidatingthefileisopenornot \n");printf("\n---Inputthefilenametovalidatetheopenfilefunction:");scanf("%s",ValidateOpenFileName);ValidateOpenFile(ValidateOpenFileName);break;/*case8:printf("\n TheSelectionOfvalidatingwrittingcontentstofile \n");break;*/case8:printf("\n TheSelectionOfvalidatingreadingcontentsfromfile \n");printf("\n---Inputthefilenametovalidatethereadingfilefunction:");scanf("%s",ValidateReadFileName);ValidateReadFile(ValidateReadFileName);break;case10:clrscr();break;default:printf("\n----InputIllegal!PleaseRe-InputTheAbovedNumber----\n");break;}}while(sel!=O);return0;}七、设计总结7.1系统特色在本系统中已初步实现一个完整命令处理器的功能,能够正常的解析命令并执行,在解析命令方面,采用指针加数组的形式,既可以节约存资源,又可以自动扩充命令参数。7.2经验教训在编程过程中要多使用库函数中自带的容, 不必另外再去编写已有的功能, 这样不仅能节省时间,能提高程序的可靠性。要多了解库函数,可以阅读相应的帮助文件来获得有用的信息。遇到问题多与老师同学讨论,可以帮助自己跳出思维定势。7.3实践感受分析每次的课程设计都是对我们所学知识的一个深化, 在实践过程中能遇到许多的问题, 遇到问题分析问题解决问题,这样对知识的理解得到一个升华。实践过程中学到的都是印象非常深刻的,所以以后要多参加这样的实践,认真对待每一次机会。参考资料1《计算机操作系统教程》(第2版)尧学史美林编著清华大学2、《操作系统实验指导》任爱华 鹏方毅清华大学科学3、 《操作系统实验教程一一核心技术与编程实例》顾宝根 王立松顾喜梅科学4、《C++编程思想》 Bruck著侯捷译 机械工业5、《C语言程序中清除键盘缓冲区的方法》 长虹职业技术学院学报#include<string.h>#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<dir.h>#include<dos.h>#include<time.h>/*定义全局变量*/charroot_dir[3];charpre_dir[255];char*cmd_line[255];charcuruser[10];structuserinf{charusername[10];charuserpass[10];};/*函数申明*/voidinit();intlogin();intgetcmd();voiddir();voidcd();voidclear();voidnewdir();voiddeldir();voiddel();voidcopy();voidcut();voidaccount();voidhelp();main(){init();while(1)/*消息循环*/{switch(getcmd()){case0:help();break;case1:dir();break;case2:cd();break;case3:newdir();break;case4:deldir();break;case5:del();break;case6:copy();break;case7:cut();break;case8:account。;break;}}}voidinit()/* 程序初始化*/{if(login()==0){exit(0);}strcpy(pre_dir,"C:\\");/* 设定当前目录*/clear();/*清屏*/printf("SShell-AboveWindowsXP[Ver1.0]\n");printf("(C)Copyright2007stars_625.\n\n");getchar();/* 清空缓冲区*/}intlogin()/* 程序登陆*/{charname[10];charpass[10];intlogintime=3;FILE*fp;structuserinfinf;while(logintime>0)/* 登陆错误超过三次自动退出 */{printf("Login:");scanf("%s",name);printf("Password:");scanf("%s",pass);if((fp=fopen("inf.dll","r"))==NULL){printf("Can'topeninf.dllfile!\n");printf("Pressanykeytoexit...");getch();exit(0);}while(fread(&inf,sizeof(inf),1,fp)==1&&strcmp(inf.username,name)!=0){}fclose(fp);if(strcmp(inf.username,name)==0){if(strcmp(inf.userpass,pass)==0){strcpy(curuser,inf.username);clear();return1;}else{printf("Loginerror,Pressanykeytorelogin!\n");getch();clear();}}else{printf("Theuserisnotexist,Pressanykeytorelogin!\n");getch();clear();}logintime--;}printf("Loginerrorabovethreetimes,Pressanykeytoexit!");getch();return0;}intgetcmd()/*获得命令*/{inti=O,j=O,k=O;charbuf[255];printf("%s>",pre_dir);/* 打印提示符*/fgets(buf,255,stdin);cmd_line[j]=calloc(255,sizeof(char));while(buf[i]!='\n'&&buf[i]!='\0')/* 命令分析*/{if(buf[i]!=''){cmd_line[j][k]=buf[i];++k;}else{cmd_line[j+1]=calloc(255,sizeof(char));k=0;++j;}++i;}cmd_line[j+1]=0;if(strcmp(cmd_line[0],"exit")==0){exit(0);}elseif(strcmp(cmd_line[0],"/?")==0||strcmp(cmd_line[1],"/?")==0){return0;}elseif(strcmp(cmd_line[0],"dir")==0){return1;}elseif(strcmp(cmd_line[0],"cd")==0){return2;}elseif(strcmp(cmd_line[0],"newdir")==0){return3;}elseif(strcmp(cmd_line[0],"deldir")==0){return4;}elseif(strcmp(cmd_line[O],"del")==O){return5;}elseif(strcmp(cmd_line[0],"copy")==0){return6;}elseif(strcmp(cmd_line[0],"cut")==0){return7;}elseif(strcmp(cmd_line[0],"account")==0){return8;}elseif(cmd_line[0][1]==':'){strcpy(pre_dir,cmdl_line[0]);strcat(pre_dir,"\\");}elseif(strcmp(cmd_line[0],"clear")==0){clear();}else{printf("Thecommandisnotsupported!、"');}}voiddir()/* 列出文件及文件夹 */{structffblkff;charfilepath[255];strcpy(filepath,pre_dir);findfirst(strcat(filepath,"*.*"),&ff,FA_DIREC);if(ff.ff_attrib==16){printf("<DIR>\t");}else{printf("\t");

}printf("%s\n",ff.ff_name);while(findnext(&ff)==0){if(ff.ff_attrib==16){printf("<DIR>\t");}else{printf("\t");}printf("%s\n",ff.ff_name);}}voidcd()/*改变当前目录*/{inti=0;structffblkff;charfilepath[255];strcpy(filepath,pre_dir);if(strcmp(cmd_line[1],"..")==0)/*{while(filepath[i]!='\0'){i++;}if(filepath[i-2]!=':'){i=i-2;while(filepath[i]!='\\'&&i>=2){i--;}filepath[i+1]='\0';strcpy(pre_dir,filepath);}}elseif(strcmp(cmd_line[1],"\\")==0)/*{while(filepath[i]!='\\'){i++;}返回上一层目录*/返回根目录*/返回上一层目录*/返回根目录*/strcpy(pre_dir,filepath);}else{findfirst(strcat(filepath,"*.*"),&ff,FA_DIREC);while(strcmp(ff.ff_name,cmd_line[1])!=0){if(findnext(&ff)!=0){break;}}if(strcmp(ff.ff_name,cmd」ine[1])==0){strcat(pre_dir,cmdl_line[1]);strcat(pre_dir,"\\");}else{printf("Can'tfindthefile!\n");}}voidclear(){clrscr();}voidnewdir(){charfilepath[255];strcpy(filepath,pre_dir);if(mkdir(strcat(filepath,cmd」ine[1]))==0){printf("Makedir'%s'successfully!\n",cmd_line[1]);}else{printf("Makedirerror!\n");}}voiddeldir(){charfilepath[255];strcpy(filepath,pre_dir);if(rmdir(strcat(filepath,cmd_line[1]))==0){printf("Deletedir'%s'successfully!\n",cmd_line[1]);}else{printf("Deletedirerror!\n");}}voiddel(){charfilepath[255];strcpy(filepath,pre_dir);if(unlink(strcat(filepath,cmd_line[1]))==0){printf("Delete%ssuccessfully!\n",cmd_line[1]);}else{printf("Deleteerror!\n");}}voidcopy(){charfilepath[255];charsourcepath[255];charaimpath[255];FILE*newfp;FILE*oldfp;charch;strcpy(filepath,pre_dir)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论