操作系统命令接口设计课程设计说明书.docx
- 文档编号:11529445
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:23
- 大小:226.79KB
操作系统命令接口设计课程设计说明书.docx
《操作系统命令接口设计课程设计说明书.docx》由会员分享,可在线阅读,更多相关《操作系统命令接口设计课程设计说明书.docx(23页珍藏版)》请在冰点文库上搜索。
操作系统命令接口设计课程设计说明书
课程设计说明书
设计名称:
操作系统课程设计
题 目:
操作系统命令接口设计
学生姓名:
专 业:
班 级:
学 号:
指导教师:
日 期:
2016 年6月28 日
课程设计任务书
网络工程专业 年级 班
一、设计题目
操作系统命令接口设计
二、主要内容
利用C语言、DOS中断中21H与屏幕显示相关的中断调用完成设计,具体包括:
1、命令解释器
2、列目录命令
3、显示时间命令
4、显示日期命令
5、回显字符串命令
6、创建目录命令
7、删除目录命令
8、更改路径命令
9、显示当前工作目录命令
10、删除文件命令
11、打印文本命令
12、文件重新命名
13、显示文本命令
14、显示版本命令
15、显示目录结构命令
16、清除当前显示内容命令
上述内容中,所有命令通过命令解释器能够执行,即启动命令解释器以后,输入相应命令,按照输入指令执行相应功能,并在屏幕上显示相应结果。
三、具体要求
本设计的目的是通过设计一些简单的操作系统的命令接口,使学生掌握操作系统接口的设计方法。
要求学生在熟悉操作系统的命令接口及程序接口的基础上,利用C语言设计简单的命令接口。
命令接口基于DOS的命令行接口。
四、ﻬ进度安排
依照教学计划,课程设计时间为:
2周。
1.要求讲解、资料查找、系统分析,概要设计(2天)
2.系统详细设计、功能设计(2天)
3.算法实现、编程调试(5天)
4.功能演示、资料整理、课程设计说明书编写。
(1天)
五、完成后应上交的材料
课程设计说明书纸质文档
六、总评成绩
指导教师 签名日期 年月 日
系 主任 审核日期 年 月 日
一、程序概述1
1.1完成的任务ﻩ1
1.2解决的问题1
二、概念原理1
2.1基本概念1
2.2基本原理1
三、总体设计ﻩ2
四、详细设计ﻩ3
4.1主要调用DOS的功能号ﻩ3
4.2主要函数ﻩ3
五、完成情况3
六、使用说明3
七、设计总结ﻩ4
7.1系统特色ﻩ4
7.2实践感受4
参考资料5
附录(程序源代码)ﻩ9
一、程序概述
1.1完成的任务
本设计是要求编写一个简单的命令解释器,利用C语言、DOS中断中21H与屏幕显示相关的中断调用进行设计的,主要完成要求中所提到的功能如:
可打开提示符,并获取用户输入的指令、可解析指令、可寻找命令文件、可执行基本的命令。
在本设计中,设计了一个dos命令提示行 ,主要完成的功能有:
显示系统时间和日期,显示系统版本号,删除文件,创建目录,删除目录,重命名目录或文件名,回显字符串,打印文件,清屏等功能。
1.2解决的问题
在设计过程中主要遇到了两个难题,一是如何理解和设计中断,对汇编和c语言的结合,如引入#include
里面主要的是结构体SREGS,联合体REGS,以及汇编语言int21H系统调用中断,以及调用功能号的查询和设置。
二、概念原理
2.1基本概念
中断
当CPU(中央处理器)执行一条现行指令的时候,出现必须CPU立即执行处理的情况,CPU暂时停止当前程序的执行转而而执行新情况叫中断,此时如果外设向CPU发出中断请求,那么CPU在满足响应的情况下,将发出中断响应信号,与此同时关闭中断,表示CPU不在受理另外一个设备的中断。
此次课程设计涉及有DOS中断和BIOS中断。
命令接口处理器
命令处理器是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。
它是一个交互性命令解释器。
命令处理器独立于操作系统,这种设计让用户可以灵活选择适合自己的命令处理器。
命令处理器让你在命令行键入命令,经过命令处理器解释后传送给操作系统(内核)执行。
命令提示符
“命令提示符”也就是Windows 95/98下的“MS-DOS方式”,虽然随着计算机产业的发展,Windows操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全、稳定,有的用户还在使用,所以一般Windows的各种版本都与其兼容,用户可以在Windows系统下运行DOS,中文版WindowsXP中的命令提示符进一步提高了与DOS下操作命令的兼容性,用户可以在命令提示符直接输入中文调用文件。
消息循环
通过这个循环机制应用程序从消息队列中检索消息,再把它分派给适当的窗口,然后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。
系统调用
系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。
用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。
从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口,它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。
2.2基本原理
首先进入一个消息循环,不断地接收消息,根据输入的命令进行解析,然后执行命令,遇exit命令退出。
基本流程图:
三、总体设计
程序主要通过文件来存储帐户信息。
进入提示符后,在消息循环中运用了一个dowhile循环,switch…case将dos条用编写的函数组合起来供用户选择使用。
连续的获取用户输入,直到用户输入0退出循环,结束程序。
在处理文件或文件夹过程中,没有使用系统当前文件夹变量,只是在程序中单独设定了一个变量作为系统当前目录,每次获得的目录路径,如果是相对路径,则自动在前面加上当前目录路径。
整个程序的设计流程,围绕着消息循环这一主线,根据消息判断调用不同的功能函数来完成相应的功能,主要使用了一些函数和汇编调用DOS接口和21号中断。
四、详细设计
4.1、主要调用DOS的功能号
2AH读取日期
2CH读取时间
30Hﻩ读取MS-DOS版本号
39Hﻩﻩ创建目录
41H 删除文件
3AHﻩ表示删除目录
56Hﻩﻩ重命名文件
3DH打开文件
47Hﻩﻩ读取当前目录
3FHﻩ读文件或目录
4.2、主要函数
voidtime()
通过定义该函数实现调用dos的2C号功能读取系统时间的功能
voidday()
通过定义该函数实现调用dos的2A功能读取系统日期的功能
void dos()
通过定义该函数调用dos的30H功能读取系统的版本号功能
voidDelete[80])
定义该函数用于删除文件或目录如果删除成功显示“success”,删除失败表示找不到该文件
voidCreate[80])
定义该函数调用dos的39H号功能用于创建一个目录
void[80],char[80])
定于该函数调用dos系统的56号功能用于重命名目录名和文件名的
voidshowlist()
定于该函数调用dos系统的47号功能读取当前的工作目录
voidrewords()
定于该函数用于调用dos的9号功能实现回显字符串功能
voidReadFrom[80])
定于该函数用于调用dos的3F功能用于读取文件或目录的内容。
clrscr();
引用该函数实现清除屏幕内容的功能。
五、完成情况
本程序完成了要求中的13项列目录,包括获取系统时间,获取系统日期,创建目录,删除目录,创建文件并写内容到文件中,打印文本,删除文件,更改目录或文件名,显示版本,清屏操作,获得当前的工作目录等13个要求
六、使用说明
运行程序首先回出现下图的界面,显示的是各项操作的命令,根据相关命令可以执行相关的操作
功能1:
显示系统时间
功能2:
系统日期:
功能3:
显示版本
功能4:
删除文件:
功能5:
创建目录
功能6:
删除目录
删除new文件夹:
功能7:
重命名目录或文件
修改目录(重命名目录):
将上面目录123修改为101
修改文件(重命名文件):
将文件名1.txt改为new1.txt
功能8:
显示当前工作目录
功能9:
回显字符串
功能10:
打印文件内容(读文件)
已知new1.txt文件里面的内容如下,通过该系统读出文件的内容
ﻩ功能11:
清除屏幕所有内容
清屏后:
直至输入指令为0(代表exit)时退出系统。
七、设计总结
7.1系统特色
本系统基本实现命令访问接口的设计,能正常解释命令并执行,在命令的解释和执行直接采用DOS系统的中断调用以及功能类型号码的选择和设置,能够符合操作系统命令接口设计的要求。
7.2实践感受
课程设计是理论知识和实际操作的一种结合,对所学的知识进行强化。
从确立课题到遇到问题查找资料,直到做出基本的结果,在这个过程中学到了之前所没有接触的知识点。
例如在编程过程中要多使用库函数中自带的内容,不必另外再去编写已有的功能,这样不仅能节省时间,也能提高程序的可靠性。
要多了解库函数,可以阅读相应的帮助文件来获得有用的信息。
遇到问题多与老师同学讨论,可以帮助自己跳出定向思维。
ﻬ
参考资料
《c程序设计》(第三版)谭浩强 著清华大学出版社
《80x86汇编语言程序设计》沈美明,温冬婵 著清华大学出版社
《c与c++标准类库及函数.chm》
《WindowsAPIfor2000/XP实例精解》王强周明李定国等编著电子工业出版社
《数据结构(c语言版)》严蔚敏,吴伟民等编著 清华大学出版社
ﻬ
附录
源代码(TorboC 3.0环境下)
#include
#include<conio.h>
#include
#include
#include<bios.h>
#defineINTER 0x21
voidmenu()
{
printf("-----------------------------------------\n");
printf("0.exit\n");
printf("1.Display systemtime\n");
ﻩprintf("2.Displaysystemday\n");
ﻩprintf("3.DisplayMos-dos version\n");
ﻩprintf("4.Deletefile\n");
printf("5.Createcontent\n");
printf("6.Deletecontents\n");
ﻩprintf("7.\n");
printf("8.Displaycurrrentlist\n");
ﻩprintf("9.Echo string\n");
printf("10.ReadingFile\n");
ﻩprintf("11.Clearscreen\n");
ﻩprintf("-----------------------------------------\n");
}
void time()
{
ﻩunionREGS inregs,outregs;//定义中断信息结构体
ﻩstructSREGS segregs;
inregs.h.ah=0x2C; //读取时间
ﻩint86x(INTER,&inregs,&outregs,&segregs);
ﻩprintf("Nowthetimeis:
%d:
%d:
%d\n",outregs.h.ch,outregs.h.cl,outregs.h.dh);
getchar();
}
voidday(){
ﻩunionREGSinregs,outregs;//定义中断信息结构体
ﻩstructSREGSsegregs;
inregs.h.ah=0x2a;//读取日期
ﻩint86x(INTER,&inregs,&outregs,&segregs);
printf("Now theday is:
%d,%d,%d\n",outregs.x.cx,outregs.h.dh,outregs.h.dl);
ﻩgetchar();
}
voiddos()
{unionREGSinregs,outregs;//定义中断信息结构体
structSREGSsegregs;
inregs.h.ah=0x30;//DOS 30号功能读取MS-DOS版本号
int86x(INTER,&inregs,&outregs,&segregs);
printf("The DOSversion ofthismachine is:
%d,%d,%d,%d:
%d\n",outregs.h.al,outregs.h.ah,outregs.h.bh,outregs.h.ah,outregs.x.cx);getchar();
}
void Delete [80])
{
intresult;
unionREGSinregs,outregs;
struct SREGSsegregs;
inregs.h.ah=0x41;//DOS中断号 41 是删除文件
ﻩinregs.x.dx=FP_OFF();
segregs.ds=FP_SEG();
ﻩint86x(INTER,&inregs,&outregs,&segregs);
ﻩif(result==2||result==5)
ﻩ{
ﻩprintf("\nCan'tdeletetheThe notbe exist!
\n",);
}
ﻩelse
{
ﻩprintf("\nThehasbeendeletesuccessfully!
\n",);
ﻩ}
}
voidCreate [80]){
ﻩunionREGSinregs,outregs;
ﻩstructSREGSsegregs;
inregs.h.ah=0x39;
inregs.x.dx=FP_OFF();
segregs.ds=FP_SEG();
ﻩint86x(INTER,&inregs,&outregs,&segregs);
if(02==outregs.x.ax)//02表示文件未找到
{ﻩ
ﻩprintf("\nis notexist!
\n",);
}
printf("success!
\n");
}
voidDelete[80]){
ﻩintresult;
unionREGSinregs,outregs;
ﻩstructSREGSsegregs;
inregs.h.ah=0x3A; //3A表示删除目录
ﻩinregs.x.dx=FP_OFF();
ﻩsegregs.ds=FP_SEG();
ﻩint86x(INTER,&inregs,&outregs,&segregs);
ﻩresult=outregs.x.ax;
ﻩif(result==2||result==5)
ﻩ{
ﻩprintf("\nCan't deletetheThenotbeexist!
\n",);
ﻩ}
else
{
ﻩprintf("\nThe hasbeen delete successfully!
\n",);
ﻩ}
}
void[80],char[80])
{
ﻩunionREGSinregs,outregs;
structSREGSsegregs;
inregs.h.ah=0x56;//DOS中断号 56是重命名文件
inregs.x.dx=FP_OFF();
segregs.ds=FP_SEG();
ﻩinregs.x.di=FP_OFF();
ﻩsegregs.es=FP_SEG();
int86x(INTER,&inregs,&outregs,&segregs);
if(outregs.x.ax==02)
{
ﻩprintf("\nis notexist!
\n",);
ﻩ}
printf("success!
\n");
}
voidshowlist(){
ﻩcharlist[80];
unionREGSreg;
ﻩstructSREGSsegreg;
ﻩreg.h.ah =0x47;//47H读取当前目录
ﻩreg.h.dl =0;
ﻩreg.x.si =FP_OFF(list);
segreg.ds= FP_SEG(list);
ﻩintdosx(&reg,&reg,&segreg);
printf("Thecurrentworkingdirectoryis:
%s\n",list);
}
void rewords()
{
ﻩunionREGS reg,reg1;
structSREGSsreg;
ﻩchar word[200];
for(inti=0;i<200;i++)word[i]='$';
scanf("%s",&word);
ﻩreg1.x.dx= FP_OFF(word);
ﻩsreg.ds =FP_SEG(word);
ﻩreg1.h.ah=0x09;
ﻩint86x(INTER,&reg1,&reg1,&sreg);
ﻩprintf("\n");
}
voidReadFrom [80])
{
ﻩunion REGSinregs,outregs;
struct SREGS segregs;
ﻩint result;
charReadContents[9*1024];
inregs.h.ah=0x3D;//3D打开文件
inregs.x.dx=FP_OFF();
ﻩsegregs.ds=FP_SEG();
inregs.h.al=2;
int86x(0x21,&inregs,&outregs,&segregs);
result=outregs.x.ax;
ﻩif(2==result)
ﻩ{
printf("\nCan'treadcontents from!
The notbeexist.\n",);
}
else
ﻩ{
ﻩinregs.x.bx=result;
inregs.h.ah=0x3F;//读文件或者目录
inregs.x.dx=FP_OFF(ReadContents);
ﻩsegregs.ds=FP_SEG(ReadContents);
ﻩinregs.x.cx=1024;
ﻩﻩint86x(0x21,&inregs,&outregs,&segregs);
ﻩprintf("\nRealNumber ofreadcharactersin\n",);
printf("\nThecontentsof!
\n",);
ﻩfor(inti=0;i ﻩﻩ{ ﻩﻩprintf("%c",ReadContents[i]); ﻩﻩ} printf("\n"); } } intmain() { ﻩcharDelete[80]; charReading[80]; ﻩcharfile1[80],file2[80]; inta; ﻩmenu(); ﻩdo ﻩ{ ﻩprintf("Pleaseinput thenumber: "); scanf("%d",&a); switch(a) { ﻩcase1: time(); ﻩbreak; ﻩcase2: day(); break; case3: dos(); ﻩbreak; ﻩcase 4: printf("\nInputthenameofexistingdelete: "); scanf("%s",Delete); ﻩDelete); break; case5: ﻩprintf("\nInputcreatecontent: "); scanf("%s",&Delete); ﻩCreate); break; ﻩcase6: ﻩprintf("\nInputdeletecontents: "); scanf("%s",&Delete); Delete); break; case 7: printf("name: "); ﻩscanf("%s",&file1); printf("newname: "); ﻩscanf ("%s",&file2); ﻩ2); ﻩbreak; ﻩcase8: showlist(); break; ﻩcase9: ﻩrewords(); ﻩbreak; ﻩcase10: printf("\nInputthe nameofexistingReading: "); ﻩscanf("%s",Reading); ﻩReadFrom); break; ﻩcase 11: clrscr(); menu(); break; ﻩdefault: break; } } while(a! =0); ﻩreturn0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 命令 接口 设计 课程设计 说明书