操作系统命令接口设计.docx
《操作系统命令接口设计.docx》由会员分享,可在线阅读,更多相关《操作系统命令接口设计.docx(14页珍藏版)》请在冰点文库上搜索。
操作系统命令接口设计
贵州工程应用技术学院
操作系统课程设计
题目:
操作系统命令接口设计
学号:
姓名:
学院:
专业班级:
指导教师:
完成时间:
2016年4月14日
信息工程学院计算机系制
操作系统命令接口设计
一、实验目的
通过设计一些简单的操作系统的命令接口,使学生掌握操作系统接口的设计方法。
在熟悉操作系统的命令接口及程序接口的基础上,利用C语言设计简单的命令接口。
命令接口基于DOS的命令行接口
二、实验功能
利用C语言、DOS中断中21H与屏幕显示相关的中断调用完成设计,如下:
●命令解释器
●列目录命令
●显示时间命令
●显示日期命令
●回显字符串命令
●创建目录命令
●删除目录命令
●更改路径命令
●显示当前工作目录命令
●删除文件命令
●打印文本命令
●文件重新命名
●显示文本命令
●显示版本命令
●显示目录结构命令
●清除当前显示内容命令
三、实验流程图
四、函数功能模块:
函数1:
显示系统当前的时间
函数:
void_TIME(void)
函数2:
显示系统当前的日期
函数:
void_DATA(void)
函数3:
在当前目录下创建一个新的目录
函数:
void_CTREAT(void)
函数4:
删除当前目录中的一个目录
函数:
void_DELDIR(void)
函数5:
更改当前目录的路径
函数:
void_ROUTE_C(void)
函数6:
显示当前的目录
函数:
void_DIR(void)
函数7:
删除当前目录中的文件
函数:
void_DELETE(void)
函数8:
打印目录中的文本
函数:
void_PRINT(void)
函数9:
给当前目录中的文件重新命名
函数:
void_RENAME(void)
函数10:
以窗口的形式显示文本
函数:
void_SHOW(void)
函数11:
显示当前系统的版本号
函数:
void_SNUM(void)
函数12:
以二叉树的形式显示系统的目录文件结构
函数:
void_TREE(void)
函数13:
清屏
函数:
void_CLS(void)
函数14:
输入判断函数检查输入命令
函数:
Command_num(charCommand_name[])
参数:
charCommand_name[]输入的命令
功能:
将其转换成相应的case常量
返回值:
num
intCommand_num(charCommand_name[])
五、核心算法
1.主要是使用API相关函数,以及调用DOS命令
2.使用strcmp()函数判断输入命令格式是否正确
3.使用清空缓冲区,以免影响下一次命令的操作
六、源程序
#include
#include
#include
#include
#include
#include"Shellapi.h"
//显示系统时间函数
void_TIME(void)
{SYSTEMTIMEst;
GetLocalTime(&st);//获取当前系统时间,以本地时间格式
printf("Now:
%d:
%d:
%d",st.wHour,st.wMinute,st.wSecond);
printf("\n");
SetLocalTime(&st);//设置当前系统时间
}
//显示系统日期函数
void_DATE(void)
{
SYSTEMTIMEst;
GetLocalTime(&st);//获取当前系统时间,以本地时间格式
printf("Now:
%d-%d-%d",st.wYear,st.wMonth,st.wDay);
printf("\n");
SetLocalTime(&st);//设置当前系统时间
}
//创建目录creat
void_CTREAT(void)
{//在同文件中创建一个文件夹先创建C,D文件夹,C中创建文件夹123,格式C\\123
chardir_name[256];
gets(dir_name);
if(CreateDirectory(dir_name,NULL))
printf("OK\n");
elseprintf("NO\n");
}
//删除目录
void_DELDIR(void)
{
charcmd[256],dirname[256];
puts("Inputthefileyoudelete:
");//格式2\3文件3里的东向全部删除
gets(dirname);
strcpy(cmd,"rmdir/s/q");
strcat(cmd,dirname);//连接两个字符串
system(cmd);//调用DOS命令
}
//更改路径名
void_ROUTE_C(void)
{
charoldname[256],newname[256];
printf("Routetorename:
");
gets(oldname);//要修改的路径名
printf("NewRootname:
");
gets(newname);//修改后的路径名
if(rename(oldname,newname)==0)//修改成功
printf("Renamed%sto%s.\n",oldname,newname);
else//修改失败
perror("rename");
}
//显示当前目录dir
void_DIR(void)
{system("dir");}
//删除文件delete
void_DELETE(void)
{charfile[80];
printf("Filetodelete:
");
gets(file);//输入删除的文件名输入格式D\\123\\123.txt
if(remove(file)==0)//删除成功
printf("Removed%s.\n",file);
else//删除失败
perror("remove");
}
//打印文本print
void_PRINT(void)
{FILE*fp;
charch,file_name[256];
printf("pleaseinputlikeC\\1\\123.txt\n");
scanf("%s",file_name);
if((fp=fopen(file_name,"rt+"))==NULL)
{printf("\nCannotopenfilestrikeanykeyexit!
");
printf("orthisisNULL!
");
}
ch=fgetc(fp);
while(ch!
=EOF)
{putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}
//重命名rename
void_RENAME(void)
{charoldname[256],newname[256];
printf("Filetorename:
");
gets(oldname);//要重命名的文件名
printf("Newname:
");
gets(newname);//新文件名
if(rename(oldname,newname)==0)
printf("Renamed%sto%s.\n",oldname,newname);
elseperror("rename");
}
//以窗口的形式显示文本show
void_SHOW(void)
{charfile_name[256];
scanf("%s",file_name);
//调用APIShellExecute()函数
ShellExecute(NULL,"open",file_name,NULL,NULL,SW_SHOWNORMAL);
}
//版本号snum
void_SNUM(void)
{printf("版本号:
DIYoperatsystem1.0\n");/*自己命名*/}
//显示目录结构tree
void_TREE(void)
{charCommand[256]={"tree/f|more"};//调用DOS命令
system(Command);
}
//清屏cls
void_CLS(void)
{
system("cls");
}
//输入判断函数检查输入命令
//函数:
Command_num(charCommand_name[])
//参数:
charCommand_name[]输入的命令
//功能:
将其转换成相应的case常量
intCommand_num(charCommand_name[])
{intnum;//case常量
if(strcmp(Command_name,"exit")==0||strcmp(Command_name,"EXIT")==0)
num=0;//退出
elseif(strcmp(Command_name,"time")==0||strcmp(Command_name,"TIME")==0)
num=1;//时间
elseif(strcmp(Command_name,"date")==0||strcmp(Command_name,"DATE")==0)
num=2;//日期
elseif(strcmp(Command_name,"creat")==0||strcmp(Command_name,"CREAT")==0)
num=3;//创建文件
elseif(strcmp(Command_name,"deldir")==0||strcmp(Command_name,"DELDIR")==0)
num=4;//删除目录
elseif(strcmp(Command_name,"croute")==0||strcmp(Command_name,"CROUTE")==0)
num=5;//修改路径
elseif(strcmp(Command_name,"dir")==0||strcmp(Command_name,"DIR")==0)
num=6;//显示当前目录
elseif(strcmp(Command_name,"delete")==0||strcmp(Command_name,"DELETE")==0)
num=7;//删除文件
elseif(strcmp(Command_name,"print")==0||strcmp(Command_name,"PRINT")==0)
num=8;//打印文件
elseif(strcmp(Command_name,"rename")==0||strcmp(Command_name,"RENAME")==0)
num=9;//重命名文件
elseif(strcmp(Command_name,"show")==0||strcmp(Command_name,"SHOW")==0)
num=10;
elseif(strcmp(Command_name,"snum")==0||strcmp(Command_name,"SNUM")==0)
num=11;//版本号
elseif(strcmp(Command_name,"tree")==0||strcmp(Command_name,"TREE")==0)
num=12;//显示目录结构
elseif(strcmp(Command_name,"cls")==0||strcmp(Command_name,"CLS")==0)
num=13;//清除当前显示
else{printf("inputerror!
\n");/*输入错误*/}
returnnum;
}
//主函数
intmain(void)
{charCommand_name[256];//命令名
intCom_num;//命令转换成常量的中间变量
//程序主界面
printf("操作系统接口设计\n");
printf("系统时间:
time/TIME\n");
printf("系统日期:
date/DATE\n");
printf("创建目录:
creat/CREAT\n");
printf("删除目录:
deldir/DELDIR\n");
printf("更改路径名:
croute/CROUTE\n");
printf("显示当前目录:
dir/DIR\n");
printf("删除文件:
delete/DELETE\n");
printf("打印文本:
print/PRINT\n");
printf("重命名文件:
rename/RENAME\n");
printf("显示文本:
show/SHOW\n");
printf("显示版本:
snum/SNUM\n");
printf("显示目录结构:
tree/TREE\n");
printf("清除屏幕:
cls/CSL\n");
printf("退出:
exit/EXIT\n");
printf("\n");
printf("请输入你要执行的命令:
");
while(scanf("%s",Command_name)&&Com_num!
=0)
{
fflush(stdin);//清除按键信息的缓存
Com_num=Command_num(Command_name);
switch(Com_num)
{case0:
Com_num=0;printf("EXITTHESYSTEM\n");
returnCom_num=0;break;
case1:
_TIME();break;//显示时间
case2:
_DATE();break;//显示日期
case3:
_CTREAT();break;//创建文件
case4:
_DELDIR();break;//删除目录
case5:
_ROUTE_C();break;//修改目录
case6:
_DIR();break;//显示当前目录
case7:
_DELETE();break;//删除文件
case8:
_PRINT();break;//打印文件
case9:
_RENAME();break;//重命名文件
case10:
_SHOW();break;//显示文件
case11:
_SNUM();break;//显示版本号
case12:
_TREE();break;//显示目录结构
case13:
_CLS();break;//清除当前显示
}
}
return0;
}
七、程序结果图
八、实验心得
在此次的课程设计中,自己找到了很多的不足,对程序的不熟悉,每个细微的细节都必须十分注意,如果不认真思考,就会出现或大或小的错误。
如果把早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时会推倒很多前面做的工作。
经过一次一次的研究,并且不懂的地方就上XX查询资料或者询问同学,终于成功的做出了这次的实验项目。
总之,在这段不短的时间里,自己学到了很多很多的东西,同时也巩固了自己以前所学的知识,而且学到了很多在书本上所没学到的知识,XX的功能是强大的,你不懂的知识他能动,通过XX自己的知识得到了很多的拓展提高。
通过在这次课程设计使我懂得了理论知识与实践动手能力组合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来。
自己只有努力了,成功才会更近一点。
虽然学到了很多东西,但依然不太喜欢程序。