《文件访问接口设计要点.pdf》由会员分享,可在线阅读,更多相关《文件访问接口设计要点.pdf(23页珍藏版)》请在三一文库上搜索。
1、课程设计说明书 设计名称:操作系统课程设计 题目:文件访问接口设计 学生姓名:余德威 专业:计算机科学与技术 班级: 13计算机 1 班 学号: 2013314111 指导教师:任朝晖 日期: 2015 年 9 月 18 日 佛山科学技术学院课程设计用纸 课程设计任务书 一、 设计题目 文件访问接口设计 二、 目的与要求 本设计的目的是通过BIOS 调用设计简单的文件访问接口,使学生掌握程 序接口的设计方法。 要求学生在熟悉比BIOS、DOS 操作系统的中断接口及程序接口的基础上, 利用 C语言设计简单的文件访问接口,最后通过程序验证接口的正确性。 三、 设计内容 利用 C语言设计,具体包括:
2、 1、基本文件内容输入 2、基本文件内容输出 3、创建文件 4、打开文件 5、关闭文件 6、文件缓冲区管理 7、文件句柄管理 8、读顺序文件 9、写顺序文件 10、读随机文件 11、写随机文件 12、文本文件操作验证程序 上述功能由两部分程序验证,中断驻留程序和验证程序。首先运行中断驻留 佛山科学技术学院课程设计用纸 程序,然后运行验证程序得到预期结果。 四、完成方式 独立完成:完成设计内容全部12 个小项或至少 3 项以上。 五、 具体要求 本设计的目的是通过BIOS 调用设计简单的文件访问接口,使学生掌握程 序接口的设计方法。 要求学生在熟悉比BIOS、DOS 操作系统的中断接口及程序接口
3、的基础上, 利用 C语言设计简单的文件访问接口,最后通过程序验证接口的正确性。 六、 进度安排 依照教学计划,课程设计时间为:2 周。 1.要求讲解、资料查找、系统分析,概要设计(2 天) 2.系统详细设计、功能设计(2 天) 3.算法实现、编程调试( 5 天) 4.功能演示、资料整理、课程设计说明书编写。(1 天) 七、 完成后应上交的材料 课程设计说明书纸质文档 八、 总评成绩 指导教师签名日期年月日 系 主 任审核日期年月日 佛山科学技术学院课程设计用纸 目录 一、程序概述 1 1.1 完成的任务 1 1.2 解决的问题 1 二、概念原理 1 2.1 基本概念 1 2.2 基本原理 2
4、三、总体设计 3 3.1 实现方法 3 3.2 技术路线 3 四、详细设计 3 4.1 主要函数 3 五、完成情况 3 六、使用说明 4 七、设计总结 10 7.1 系统特色 10 7.2 经验教训 10 7.3 实践感受 10 参考资料 10 附录 11 佛山科学技术学院课程设计用纸 1 一、程序概述 1.1 完成的任务 本设计要求编写一个简单的文件访问接口设计,利用C 语言, DOS 与 BIOS 中断调用进行设计。主要 完成要求中所提到的功能如: 创建文件,删除文件,打开文件,关闭文件,基本文件内容输入,基本文件 内容输出,读顺序文件,写顺序文件,文本文件操作验证程序,文件缓冲区管理的实
5、现。 1.2 解决的问题 在设计过程遇到了以下的问题: 一是有关文件的操作,如文件夹的创建与删除;二是在 理解了中断的意义之后,进行中断函数如int86(),int86x(),intdos(),intdos()等函数的调 用有点模糊。 解决的过程 : 通过在网上查阅了相关资料及参考在图书馆借的C 高级实用设计和上学 期学过的汇编语言的书后,再有不懂的疑惑向老师解答和与同学讨论解决方法。 有关函数的调用参数的设计,基本上是基于这些: 结构体 WORDREGS,BYTEREGS,SREGS, 联 合体 REGS ,文件属性字节,以及汇编语言中int 21H dos系统功能调用中中断类型(主要是 2
6、1H)以及调用功能号的查询和设置。 下面主要介绍上述提及的几个结构体跟联合体: / 以字作为单位的寄存器所组合的结构体 Struct WORDREGS Unsigned int ax,bx,cx,dx,si,di,cflag,flags; ; / 以字节作为单位的寄存器做组合的结构体 Struct BYTEREGS Unsigned char al,ah,bl,bh,cl,ch,dl,dh; ; / 由上述两个结构体所组合的共用体( 联合体) Union REGS Struct WORDREGS x ; Struct BYTEREGS h; ; / 由段寄存器组合的结构体 Struct SRE
7、GS Unsigned int es,cs,ss,ds; ; 二、概念原理 2.1 基本概念 中断 中断:顾名思义,是指当出现需要时,CPU 暂时停止当前程序的执行转而执行处理新情况的程序和 执行过程。即在程序运行过程中,系统出现了一个必须由CPU 立即处理的情况,此时,CPU 暂时中止程 序的执行转而处理这个新的情况的过程就叫做中断。本课题中涉及的为dos 中断跟 bios 中断。 文件访问接口 所谓访问接口,实际上即为用户通过dos 状态下的提示,键入相关命令后,作为访问相关文件操作的 佛山科学技术学院课程设计用纸 2 中介,即类似一个中转站。而系统同时也需要在响应了用户键入的命令后执行预
8、先编写好的相应程序,并 将程序的执行结果通过中介,即文件访问接口,输出给用户。而事实上在系统响应一次用户的命令时,系 统进行了一次IO 中断。 中断驻留程序 中断驻留程序,指的是当加载进内存的程序执行完毕后,依然能够保存产生的临时数据跟临时状态, 而在下一次调用时继续执行。 验证程序 本课题的验证程序,指的是,当用dos,bios 中断调用编写好相关用于文件访问的函数并执行之后, 用 C 语言高级的函数如fopen(),fprintf(),fgetc(),fclose()等函数来验证上述编写的访问函数是否可 行。本课题中用fopen(),fclose()来验证用dos 中断调用所编写的函数Cl
9、oseFile() ,CreateFile()和 CloseFile();用fgetc(),fprintf()等 函 数 来 验 证 用dos中 断 调 用 所 编 写 的WriteToFile()和 ReadFromFile()函数; 除此之外, 像 ftell(),fseek()等的验证是同样的道理。只需基于上述由dos,bios 中断调用所编写的函数. 系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过 这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开 文件、关闭文件或读写文件,可以通过时钟相关的
10、系统调用获得系统时间或设置定时器等。 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口,它好比一个中间人,把用 户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。 2.2 基本原理 本课题的运行结果,首先是在运行开始时给定了10 个选择开关,供用户选择,每当接收一次用户的 选择时, 系统将进行一次的IO 中断, 之后执行相应的中断服务程序,在这里是指由dos,bios 中断调用编写 好的函数,调用结束时,将临时结果保存,并退出中断,继续响应用户的选择,直到用户选择了退出。 如下图所示 : 图 2-1 佛山科学技术学院课程设计用纸 3 三、总体设计 3.1
11、 实现方法 程序通过选择开关switch.case将用 dos,bios调用编写的函数组合起来供用户做出选 择。在对应处理用户的选择编写的函数中,主要的核心是dos 功能中断调用函数的编写,其 中包括中断类型号,中断功能调用号等的设置,以及响应用户选择后中断服务程序的编写。 另外,可以通过参看当前工作目录下的文件信息或者通过Validate开头的相关函数进行 程序运行结果的验证 3.2 技术路线 整个程序的设计流程,围绕着bios,dos功能中断调用这一主线, 编写好相关文件操作函数,在响应 用户选择之后,对应执行相关的函数 四、详细设计 4.1 主要函数 Int OperOfSel(): 用
12、于显示可供用户选择的功能,并提示用户作出相应的功能选择 Void CreateFile(char filename80): 用于创建一个新的文件: 根据用户输入的文件名进行文件的创建,如果文件创建失败: 如 磁盘空间已满或者已经存在该文件,即创建失败 Int DeleteFile(char filename80): 用于删除一个文件,如果删除成功,将返回文件代号,否则删除失败:可能是不存在该 文件 Int OpenFile(char filename80): 用于打开一个文件,如果打开成功,则返回文件代号,否则打开失败,可能是不存在该 文件 Void CloseFile(filename80)
13、: 用于关闭一个文件 Void WriteToFile(filename80): 用于写顺序文件基本文件内容的输入以及文件缓冲区的管理: 首先根据用户输入的文 件名打开一个文件,如果存在该文件,则打开成功,开始写入内容,此时继续接受用户输入 的内容,注意,输入直到用户键入回车键即表示输入完毕,此时将输入的内容根据文件缓冲 区管理规则将用户输入的内容进行存储至指定文件名的文件中 Void ReadFromFile(filename80): 用于读顺序文件基本文件内容的输出以及文件缓冲区的管理:从指定的文件中读取 文件中的内容,并输出 ; Void ValidateOpenFile(char fi
14、lename80): 用于验证上述文件访问函数编写的正确性:用于验证创建文件打开文件是否成功 Void ValidateReadFile(char filename80): 用于验证上述文件访问函数编写的正确性:用于验证上述中 WriteToFile(filename80)以 及 ReadFromFile(filename80):函数 4.2 引用函数 Clrscr() :用于清空屏幕的作用 五、完成情况 本程序完成了其中的9 项,能够实现文件的创建,打开,关闭,基本文件内容的输入,输出,文件 缓冲区的管理,以及文本文件的验证程序,写顺序文件,读顺序文件。 佛山科学技术学院课程设计用纸 4 六
15、、使用说明 运行成功后进行首页,开始接受用户的选择 图 5-1 接着进行相应功能选项前面对应数字的输入: 1 号功能:为创建一个新的文件 图 5-2 查看目录,目录下果然生成my 文件 ,所以文件创建成功; 佛山科学技术学院课程设计用纸 5 图 5-3 当该文件已经存在时,再创建该文件时,会提示文件已存在,创建已失败; 图 5-4 2 号功能:删除文件 若文件不存在,则操作失败;否则,文件被删除,如下图:yuyu 文件删除成功; 图 5-5 图 5-6 3 号打开文件功能 打开已存在的文件,显示打开文件成功。 佛山科学技术学院课程设计用纸 6 图 5-7 图 5-8 若输入的文件是不存在的,会
16、提示打开操作失败; 佛山科学技术学院课程设计用纸 7 图 5-9 4 号功能:关闭文件 图 5-10 5 号功能: 写入文件的内容,如下在文件中输入wearetheworld 图 5-11 佛山科学技术学院课程设计用纸 8 图 5-12 6 号功能: 读出文件内容 图 5-13 7 号功能: 确认文件是否打开 图 5-14 8 号功能: 从文件读内容输出 佛山科学技术学院课程设计用纸 9 图 5-15 9 号功能 :清屏 结果将出现清空屏幕的效果 图 5-16 图 5-17 0 号功能:退出 图 5-18 佛山科学技术学院课程设计用纸 10 七、设计总结 7.1 系统特色 在本系统中已初步实现
17、一个可访问的文件接口,能够正常的解析命令并执行,在解析命令方面,采用 中断函数调用以及功能类型号选择设置的形式,达到直接与底层“打交道”的作用,效率比较高。 7.2 经验教训 由于在开始做操作系统课程设计时,对要选择的题目,自己没有很快确定下来,所以时而找找这道题 的资料,时而找找第三题的资料,又看看有参考样本的第一道题,这过程中确实耽误了不少,但同时也让 我明白,目标的重要性,只有有了目标,奋斗起来才会快且成长多,所以一旦定下来任务,就加把劲地把 它做完;不懂就想办法把它搞懂。另外,由于这次是比较偏低层,所以,很多我们平常调用的函数不能用 到,确实有点不适,也让我明白现在的我存在的依赖性及知
18、识点的不足。所以,在接下来的时段里,我要 加油,加把劲充实自己。遇到问题时多与老师及同学讨论,这样很有利于自己跳出思维定势。 7.3 实践感受 每次的课程设计对我们来说,都是课堂知识所学的一个深化,在实践这个过程中,我们不免会遇到许 多我们未曾想过的问题,但是, 我们无须害怕,因为我们需要成长,我们需要养成遇到问题,能分析问题, 进而解决问题,这样当我们的课程设计完成了,当我们的学业完成了,我们也就渐渐养成了如何解决问题 的思维及如何去做的行动观。 这次的课程设计,让我看到了我上学期所学知识的不牢固,让我知道我上学期的懒惰成为了我现在成 长的阻碍。操作系统这门课程的理论性很强,如果单单靠我们上
19、学期所学的理论知识,完全不足于我们使 用,所以,无论是为了什么,都得学着把操作系统的知识实践化,无论是文件访问接口设计还是操作系统 命令接口,都有它存在的意义; 而且通过此次的课程设计,认识了讨论的重要性,个人的力量有限,如果没有团队的话,很多事情都 是很难完成的,三个臭皮匠顶过一个诸葛亮。如果遇到了一个人难以解决,那么最好是提出来与伙伴或者 同学一同探讨,这不但能知道别人的想法,也能解决自己的困惑,何乐而不为啊? 参考资料 1、 操作系统实验指导任爱华李鹏刘方毅清华大学出版社 2、 C高级编程及实例分析王为青刘变红编著人民邮电出版社 3、 C高级实用程序设计王世元编著清华大学出版社 4、 8
20、0x86 汇编语言程序设计沈美明,温冬婵编著,清华大学出版社 5、 操作系统实验教程核心技术与编程实例顾宝根王立松顾喜梅科学出版社 佛山科学技术学院课程设计用纸 11 附录 /* 时间: 2015 年 09 月 07 日 程序:文件访问接口设计 班级: 13 计算机 1 班 姓名:余德威 学号: 2013314111 */ #include #include #include #include #include #include #define INTER 0x21 #define Num 80 #define CNum 9 /选择功能 int OperOfSel() printf(“nn F
21、unction Of Selection n“); printf(“ *n“); printf(“ | | n“); printf(“ | 1 Create a file | n“); printf(“ 2 Delete a file - n“); printf(“ 3 Open a file n“); printf(“ 4 Close a file n“); printf(“ 5 Input contents to file n“); printf(“ 6 Output contents from file n“); printf(“ | 7 Validate the file is ope
22、n or not | n“); printf(“ | 8 Validate the reading contents from file | n“); printf(“ | 9 Clean the screen | n“); printf(“ | 0 Exit | n“); printf(“ | | n“); printf(“ / / n“); printf(“nFunction Of Selection “); int sel; printf(“nInput Your Selction:“); scanf(“%d“, return sel; /创文件 void CreateFile(char
23、 filename80) 佛山科学技术学院课程设计用纸 12 union REGS inregs,outregs; struct SREGS segregs; inregs.h.ah=0x5B; /创建文件的中断指令是5B inregs.x.dx=FP_OFF(filename); /设置段地址和有效地址 segregs.ds=FP_SEG(filename); inregs.x.cx=0; /设置文件属性是0;cx 文件属性 int86x(INTER, if(outregs.x.ax=2) printf(“Fail To Create New Filen“); return; if(outr
24、egs.x.ax=80) printf(“Fail to create file: %s The file has benn existedn“,filename); return; printf(“Create New File:%s Successfully!n“,filename); printf(“The Files Attribute is:%dn“,outregs.x.cx); printf(“The Filecode is:%dn“,outregs.x.ax); /删除文件 int DeleteFile(char filename80) union REGS inregs,out
25、regs; struct SREGS segregs; inregs.h.ah=0x41; /删除文件的中断指令是41 inregs.x.dx=FP_OFF(filename); segregs.ds=FP_SEG(filename); intdosx( int result = outregs.x.ax; return result; /打开文件 int OpenFile(char filename80) union REGS inregs,outregs; struct SREGS segregs; int result; 佛山科学技术学院课程设计用纸 13 inregs.h.ah=0x3
26、D; inregs.x.dx=FP_OFF(filename); segregs.ds=FP_SEG(filename); inregs.h.al=2;/ 设置文件路径 int86x(INTER, result = outregs.x.ax; return result; /关闭文件 void CloseFile(char filename80) union REGS inregs,outregs; struct SREGS segregs; int result; int FileCode; inregs.h.ah=0x3D; /打开文件用于读,写或补充 inregs.x.dx=FP_OFF
27、(filename); segregs.ds=FP_SEG(filename); inregs.h.al=2; int86x(INTER, result = outregs.x.ax; if(2=result) printf(“nFail to close the file: %s It may not existn“,filename); else FileCode = outregs.x.ax; inregs.h.ah = 0x3E; /强迫清除所有缓冲区,更新目录 inregs.x.bx = FileCode; int rel = intdos( printf(“nClose File:
28、 %s Successfully! rel=%d n“,filename,rel); /在写入文件内容 void WriteToFile(char filename80) union REGS inregs,outregs; struct SREGS segregs; int result; 佛山科学技术学院课程设计用纸 14 int FileCode; char WriteContentsCNum; inregs.h.ah=0x3D; inregs.x.dx=FP_OFF(filename); segregs.ds=FP_SEG(filename); inregs.h.al=2; int86
29、x(INTER, result = outregs.x.ax; if(2=result) printf(“nCan not input contents to file: %s ! It may not exist.n“,filename); else getchar(); printf(“nInput The Writting Contents:n“); int count=0; int temp=0; int sumChar=0; for(int i=0;i=CNum-1;i+) if(count=1) WriteContentsi=temp; i+; count=0; scanf(“%c
30、“, if(WriteContentsi=n) break; if(i=CNum-1) 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; intdosx( temp = WriteContentsi; count = count+1; i = -1; 佛山科学技术学院课程设计用纸 15 sumChar += outregs.x.ax; FileC
31、ode = result; inregs.h.ah=0x40; inregs.x.dx=FP_OFF(WriteContents); segregs.ds=FP_SEG(WriteContents); inregs.x.bx=FileCode; inregs.x.cx=i; intdosx( sumChar += outregs.x.ax; printf(“nnThe number of contents you have write to file are: %dn“,sumChar); /读取文件中内容 void ReadFromFile(char filename80) union RE
32、GS inregs,outregs; struct SREGS segregs; int result; char ReadContentsCNum*1024; inregs.h.ah=0x3D; inregs.x.dx=FP_OFF(filename); segregs.ds=FP_SEG(filename); inregs.h.al=2; intdosx( result = outregs.x.ax; if(2=result) printf(“nCan not read contents from file: %s ! The file may not exist.n“,filename)
33、; else inregs.x.bx=result; inregs.h.ah=0x3F; inregs.x.dx=FP_OFF(ReadContents); segregs.ds=FP_SEG(ReadContents); inregs.x.cx=1024; intdosx( printf(“Real Number Of Read Characters in file:%s : %dn“,filename,outregs.x.ax); printf(“nThe Contents Of File: %s Are Listed Below: n“,filename); for(int i=0;io
34、utregs.x.ax;i+) printf(“%c“,ReadContentsi); 佛山科学技术学院课程设计用纸 16 printf(“n“); /确认文件是否打开 void ValidateOpenFile(char filename80) FILE *fp; fp=fopen(filename,“r“); if(!fp) printf(“nOpen file: %s Failly! fail to validate open file function.n“,filename); return; else printf(“nOpen file: %s Successfully! suc
35、cess to validate open file function.n“,filename); fclose(fp); /确认文件 void ValidateReadFile(char filename80) FILE *fp; fp = fopen(filename,“r“); if(!fp) printf(“nCan not read contents from file:%s It may not exist.n“,filename); return; else int count=0; printf(“nRead contents from file:%s successfully
36、! The below are the contents.n“,filename); char ch; while(ch=fgetc(fp)!=EOF) count+; printf(“%c“,ch); printf(“n“); printf(“nThe total number of contents of the file: %s are: %d.n“,filename,count); 佛山科学技术学院课程设计用纸 17 fclose(fp); int main() clrscr(); char CreateFileNameNum; char DeleteFileNameNum; char
37、 OpenFileNameNum; char CloseFileNameNum; char WrittingFileNameNum; char ReadingFileNameNum; char ValidateOpenFileNameNum; char ValidateReadFileNameNum; int sel; do sel = OperOfSel(); switch(sel) case 0: printf(“nExit the systemn“); exit(0); break; case 1: printf(“nSelection Of Creating A NewFilen“);
38、 printf(“nInput the name of file to create: “); scanf(“%s“,CreateFileName); CreateFile(CreateFileName); break; case 2: printf(“nSelection Of Deleting A ExistingFilen“); printf(“nInput the name of existing file to delete: “); scanf(“%s“,DeleteFileName); int RelOfDel = DeleteFile(DeleteFileName); if(0
39、=RelOfDel) printf(“nThe File: %s has been delete successfullyn“,DeleteFileName); else printf(“nCan not delete the file:%s It may not be existn“,DeleteFileName); 佛山科学技术学院课程设计用纸 18 break; case 3: printf(“nThe Selection Of Opening an Existing Filen“); printf(“nInput the name of existing opening file: “
40、); scanf(“%s“,OpenFileName); int RelOfOpenFile = OpenFile(OpenFileName); if(2=RelOfOpenFile) printf(“nFail To Open The File:%s May not existn“,OpenFileName); else printf(“nSuccessfully Opening The File: %sn“,OpenFileName); break; case 4: printf(“nThe Selection Of Closing an Existing File.n“); printf
41、(“nInput The Name Of Closing File: “); scanf(“%s“,CloseFileName); CloseFile(CloseFileName); break; case 5: printf(“nThe Selection Of Writting Basic Contents To Filen“); printf(“Input The Name Of Writting File : “); scanf(“%s“,WrittingFileName); WriteToFile(WrittingFileName); break; case 6: printf(“n
42、The Selection Of Reading Basic Contents From File.n“); printf(“Input The Name Of Reading File: “); scanf(“%s“,ReadingFileName); ReadFromFile(ReadingFileName); break; case 7: printf(“nThe Selection Of validating the file is open or notn“); printf(“nInput the filename to validate the open file functio
43、n: “); scanf(“%s“,ValidateOpenFileName); ValidateOpenFile(ValidateOpenFileName); break; case 8: printf(“nThe Selection Of validating reading contents from filen“); printf(“nInput the filename to validate the reading file function: “); scanf(“%s“,ValidateReadFileName); ValidateReadFile(ValidateReadFileName); break; 佛山科学技术学院课程设计用纸 19 case 9: clrscr(); break; default: printf(“nInput Illegal! Please Re-Input The Aboved Number.n“); break; while(sel!=0); return 0;
链接地址:https://www.31doc.com/p-5208778.html