




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
佛山科学技术学院课程设计用纸佛山科学技术学院课程设计用纸课程设计说明书设计名称:操作系统课程设计题 目:文件访问接口设计学生姓名: 陈小浪 专 业: 计算机科学与技术班级:12级1班 学 号: 2012314118指导教师: 任朝晖 日期:2014年9月A5_日课程设计任务书计算机科学与技术 专业 年级_班 一、 设计题目文件访问接口设计二、 主要内容利用C语言设计,具体包括:1、 基本文件内容输入2、 基本文件内容输出3、 创建文件4、 打开文件5、 关闭文件6、 文件缓冲区管理7、 文件句柄管理&读顺序文件9、 写顺序文件10、 读随机文件11、 写随机文件12、 文本文件操作验证程序上述功能由两部分程序验证,中断驻留程序和验证程序。首先运行中断驻留程序,然后运行验证程序得到预期结果。三、 具体要求本设计的目的是通过BIOS调用设计简单的文件访问接口,使学生掌握程序接口的设计方法。要求学生在熟悉比BIOS、DOS操作系统的中断接口及程序接口的基础上,利用 C语言设计简单的文件访问接口,最后通过程序验证接口的正确性。四、 进度安排TOC\o"1-5"\h\z依照教学计划,课程设计时间为: 2周。1.要求讲解、资料查找、系统分析,概要设计(2天)2.系统详细设计、功能设计(2天)3.算法实现、编程调试(5天)4.功能演示、资料整理、课程设计说明书编写。(1天)五、完成后应上交的材料课程设计说明书纸质文档六、总评成绩TOC\o"1-5"\h\z指导教师 签名日期 年 月 日系主任 审核日期 年 月 日目录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\o"CurrentDocument"参考资料 28附录 29佛山科学技术学院课程设计用纸佛山科学技术学院课程设计用纸序的执行转而处理这个新的情况的过程就叫做中断。本课题中涉及的为 dos序的执行转而处理这个新的情况的过程就叫做中断。本课题中涉及的为 dos中断跟bios中断。文件访问接口所谓访问接口,实际上即为用户通过 dos状态下的提示,键入相关命令后,作为访问相关文件操作的中介,即类似一个中转站。而系统同时也需要在响应了用户键入的命令后执行预先编写好的相应程序,并// VeryImportantHere:ToAbosrbTheEnterKeyCode;getchar();printf("\n\nlnputTheWrittingContents:\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++;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;inregs.h.ah=0x40;inregs.x.dx=FP_OFF(WriteContents);//inregs.x.dx=FP_OFF(WriteContents);segregs.ds=FP_SEG(WriteContents);inregs.x.bx=FileCode;inregs.x.cx=i;//printf("inregs.x.cx=%d\n",inregs.x.cx);//int86x(INTER,&inregs,&outregs,&segregs);intdosx(&inregs,&outregs,&segregs);〃printf("NowTheAx=%d\n",outregs.x.ax);//printf("inregs.x.bx=%d\n",inregs.x.bx);//printf("HelloWorld'n");temp=WriteContents[i];count=count+1;i=-1;sumChar+=outregs.x.ax;}//if(i==8)end//printf("%c",WriteContents[i]);}//endforcircle;/*charTempContents[8];for(intk=O;k<i;k++){TempContents[k]=WriteContents[k];}*///printf("\n\n--therestofthecontentsoffile:%sarelistedbelow'n",filename);//printf("WriteContents=%s\n",WriteContents);//printf("WriteContents[0]=%cWriteContents[1]=%c\n",WriteContents[0],WriteContents[1]);/*for(intj=O;j<i;j++){printf("%c",WriteContents[j]);}printf("\n");*/〃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;inregs.h.ah=0x40;inregs.x.dx=FP_OFF(WriteContents);segregs.ds=FP_SEG(WriteContents);inregs.x.bx=FileCode;inregs.x.cx=i;//printf("inregs.x.cx=%d\n",inregs.x.cx);//int86x(INTER,&inregs,&outregs,&segregs);intdosx(&inregs,&outregs,&segregs);sumChar+=outregs.x.ax;printf("\n\nThenumberofcontentsyouhavewritetofileare:%d--\n",sumChar);//printf("NowTheAx=%d\n",outregs.x.ax);//printf("inregs.x.bx=%d\n",inregs.x.bx);//printf("i=%d\n",i);}//ReadContentsFromExistingFile;voidReadFromFile(charfilename[80]){unionREGSinregs,outregs;structSREGSsegregs;intresult;charReadContents[CNum*1024];inregs.h.ah=0x3D;inregs.x.dx=FP_OFF(filename);segregs.ds=FP_SEG(filename);inregs.h.al=2;intdosx(&inregs,&outregs,&segregs);result=outregs.x.ax;if(2==result){Thefilemaynotprintf("\nCan notreadcontentsfromfile: %sThefilemaynotexist \n",filename);}else{//printf("\nNowI'llReadContentsFromFile:%s\n",filename);inregs.x.bx=result;inregs.h.ah=0x3F;//printf("%d\n",inregs.x.bx);inregs.x.dx=FP_OFF(ReadContents);segregs.ds=FP_SEG(ReadContents);inregs.x.cx=1024;intdosx(&inregs,&outregs,&segregs);printf(”——RealNumberOfReadCharactersinfile:%s:%d\n",filename,outregs.x.ax);〃printf("ReadContents=%s\n",ReadContents);printf("\n——TheContentsOfFile:%sAreListedBelow:\n",filename);for(inti=0;i<outregs.x.ax;i++){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("\nRead 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("\nInputthenameoffiletocreate:");scanf("%s",CreateFileName);CreateFile(CreateFileName);break;case2://printf("Select2\n”);printf("\n SelectionOfDeletingAExistingFile \n");printf("\nInputthenameofexistingfiletodelete:");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("\nInputthenameofexistingopeningfile:");scanf("%s",OpenFileName);〃printf("\nOpenFileName=%s\n",OpenFileName);intRelOfOpenFile=OpenFile(OpenFileName);if(2==RelOfOpenFile){printf("\n FailToOpenTheFile:%sMaynotexist\n",OpenFileName);}else{FileCode//printf("\nSuccessfully Opening TheFile: %s TheFileCodeIs:%d\n",OpenFileName,outregs.x.ax);printf("\nSuccessfullyOpeningTheFile:%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("\nInputthefilenametovalidatetheopenfilefunction:");scanf("%s",ValidateOpenFileName);ValidateOpenFile(ValidateOpenFileName);break;/*case8:printf("\n TheSelectionOfvalidatingwrittingcontentstofile \n");break;*/case8:printf("\n TheSelectionOfvalidatingreadingcontentsfromfile \n");printf("\nInputthefilenametovalidatethereadingfilefunction:");scanf("%s",ValidateReadFileName);ValidateReadFile(ValidateReadFileName);break;case10:clrscr();break;default:printf("\nInputIllegal!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()==O){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(cmdl_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,cmd」ine[0]);strcat(pre_dir,"\\");}elseif(strcmp(cmdl_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)==O){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++;}filepath[i+1]='\0';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,cmdl_line[1])==0){strcat(pre_dir,cmdd_line[1]);strcat(pre_dir,"\\");}else{printf("Can'tfindthefile!\n");}}voidclear(){clrscr();}voidnewdir(){charfilepath[255];strcpy(filepath,pre_dir);if(mkdir(strcat(filepath,cmd_line[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);if(cmd_line[1][1]!=':'){strcpy(sourcepath,filepath);strcat(sourcepath,cmd」ine[1]);}else{strcpy(sourcepath,cmd_line[1]);}if(cmd_line[2][1]!=':'){strcpy(aimpath,filepath);strcat(aimpath,cmd_line[2]);}else{strcpy(aimpath,cmd_line[2]);}if((oldfp=fopen(sourcepath,"r"))==NULL){printf("Can'topenoldfile!\n");}if((newfp=fopen(aimpath,"w"))==NULL){printf("Can'tcreatnewfile!\n");}while((ch=fgetc(oldfp))!=EOF){fputc(ch,newfp);}fclose(oldfp);fclose(newfp);printf("Copyfrom%sto%ssuccessfully!\n",sourcepath,aimpath);}voidcut(){charfilepath[255];charsourcepath[255];charaimpath[255];FILE*newfp;FILE*oldfp;charch;strcpy(filepath,pre_dir);if(cmd_line[1][1]!=':'){strcpy(sourcepath,filepath);strcat(sourcepath,cmd」ine[1]);}else{strcpy(sourcepath,cmd_line[1]);}if(cmd_line[2][1]!=':'){strcpy(aimpath,filepath);strcat(aimpath,cmd_line[2]);}else{strcpy(aimpath,cmd_line[2]);}if((oldfp=fopen(sourcepath,"r"))==NULL){printf("Can'topenoldfile!\n");}if((newfp=fopen(aimpath,"w"))==NULL){printf("Can'tcreatnewfile!\n");}while((ch=fgetc(oldfp))!=EOF){fputc(ch,newfp);}fclose(oldfp);fclose(newfp);if(unlink(sourcepath)==0){printf("Cutfrom%sto%ssuccessfully!\n",sourcepath,aimpath);}else{printf("Deleteoldfileerror!\n");}}voidaccount(){FILE*fp;structuserinfinf;if(strcmp(cmd_line[1],"/add")==0){if((fp=fopen("inf.dll","r+"))==NULL){printf("Can'topeninf.dllfile!\n");printf("Pressanykeytoexit...");getch();}while(fread(&inf,sizeof(inf),1,fp)==1&&strcmp(inf.username,cmd」ine[2])!=0){}if(strcmp(inf.username,cmd」ine[2])==0){printf("Createusererror,theuserisexist!\n");}else{strcpy(inf.username,cmd_line[2]);strcpy(inf.userpass,cmd_line[3]);if(fwrite(&inf,sizeof(inf),1,fp)==1){printf("Createuser%ssuccessfully!\n",inf.username);}else{printf("Createusererror!\n");}}fclose(fp);}elseif(strcmp(cmd_line[1],"/edit")==0){if((fp=fopen("inf.dll","r+"))==NULL){printf("Can'topeninf.dllfile!\n");printf("Pressanykeytoexit...");getch();}while(fread(&inf,sizeof(inf),1,fp)==1&&strcmp(inf.username,cmd」ine[2])!=0){}if(strcmp(inf.username,cmd」ine[2])!=0){printf("Editusererror,theuserisnotexist!\n");}else{strcpy(inf.username,cmd_line[2]);strcpy(inf.userpass,cmd_line[3]);fseek(fp,-20L,1);if(fwrite(&inf,sizeof(inf),1,fp)==1){printf("Edituser%ssuccessfully!\n",inf.username);}else{printf("Editusererror!\n");}}fclose(fp);}else{printf("Pleaseentercorrectparameter,type/?forhelp!\n");}}voidhelp(){if(strcmp(cmd_line[O],"/?")==O){printf("Thelistofcommands.\n\n");printf("dir\t\tListthefilesanddirs.'n");printf(" cd\t\tChangethedir.\n");printf(" clear\t\tClearthescreen.'n");printf(" newdir'tMakeadir.\n");printf(" deldir\tDeleteadir.\n");printf("del\t\tDeleteafile.'n");printf("copy\t\tCopyafilefromaplacetoanother.'n");printf("cut\t\tCutafilefromaplacetoanother.'n");printf("account'tAddeditordeleteaaccount.\n\n");printf("Formoreinformationaddtype/?afte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论