操作系统 实验一
实验一
一、 实验目的
(1)掌握命令解释程序的原理;
(2)掌握简单的DOS调用方法;
(3)掌握C语言编程初步。
二、 实验内容和要求
内容:根据教师指定的实验课题,完成设计、编码、测试工作。
要求:编写类似于DOS,UNIX的命令行解释程序
(1)自行定义系统提示符
(2)自定义命令集(8-10个)
(3)用户输入HELP以查找命令的帮助
(4)列出命令的功能,区分内部还是外部命令
(5)用户输入QUIT退出
(6)内部命令有dir, cd, md, rd, cls, date, time, ren, copy等。
三、 实验方法、步骤及结果测试
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> int main() { char str[20]; char mini[20][20]={"?","cd","md","rd","cls","date","time","ren","copy","dir","quit","call",""}; printf("Microsoft Windows [版本 6.1.7601]\n版权所有 (c) 2013 Microsoft Corporation. 保留所有权利。\n\n"); while(1) { printf("C:\\Documents and Settings\\Users>"); gets(str); strlwr(str); if(strcmp(str,mini[0])==0) { printf("'?'\t外部命令输入正确!\n"); printf("该命令作用是:提供windows命令的帮助信息。\n\n"); printf("DIR\t内部命令 显示一个目录中的文件和子目录。\n"); printf("CD\t内部命令 显示当前目录的名称或将其更改。\n"); printf("MD\t内部命令 创建一个目录。\n"); printf("RD\t内部命令 删除目录。\n"); printf("CLS\t内部命令 清除屏幕。\n"); printf("DATE\t内部命令 显示或设置日期。\n"); printf("TIME\t内部命令 显示或设置系统时间。\n"); printf("REN\t内部命令 重新命名文件。\n"); printf("COPY\t内部命令 将至少一个文件复制到另一个位置。\n"); printf("CALL\t内部命令 从另一个批处理程序调用这一个。\n\n"); printf("QUIT\t外部命令 退出命令解释程序。\n"); printf("?\t外部命令 提供windows命令的帮助信息。\n"); } else if(strcmp(str,mini[1])==0) { printf("'CD'\t内部命令输入正确!\n"); printf("该命令作用是:显示当前目录的名称或将其更改。\n"); } else if(strcmp(str,mini[2])==0) { printf("'MD'\t内部命令输入正确!\n"); printf("该命令作用是:创建一个目录。\n"); } else if(strcmp(str,mini[3])==0) { printf("RD\t内部命令输入正确!\n"); printf("该命令作用是:删除目录。\n"); } else if(strcmp(str,mini[4])==0) //清屏 { printf("'CLS'\t内部命令输入正确!\n"); printf("该命令作用是:清除屏幕。\n"); system("cls"); } else if(strcmp(str,mini[5])==0) //显示日期 { printf("'DATE'\t内部命令输入正确!\n"); printf("该命令作用是:显示或设置日期。\n\n"); time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), "当前日期:%Y/%m/%d ",localtime(&t) ); puts( tmp ); printf("输入新日期:<年/月>\n"); } else if(strcmp(str,mini[6])==0) //显示时间 { printf("'TIME'\t内部命令输入正确!\n"); printf("该命令作用是:显示或设置系统时间。\n\n"); time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), "当前时间: %X ",localtime(&t) ); puts( tmp ); printf("输入新的时间:\n"); } else if(strcmp(str,mini[7])==0) { printf("'REN'\t内部命令输入正确!\n"); printf("该命令作用是:重新命名文件。\n"); } else if(strcmp(str,mini[8])==0) { printf("'COPY'\t内部命令输入正确!\n"); printf("该命令作用是:将至少一个文件复制到另一个位置。\n"); } else if(strcmp(str,mini[9])==0) { printf("'DIR'\t内部命令输入正确!\n"); printf("该命令作用是:显示一个目录中的文件和子目录。\n\n"); system("dir"); } else if(strcmp(str,mini[10])==0) //退出 { printf("'QUIT'\t外部命令输入正确!\n"); printf("该命令作用是:退出命令解释程序。\n"); printf("see you!\n\n"); exit(0); } else if(strcmp(str,mini[11])==0) { printf("'CALL'\t内部命令输入正确!\n"); printf("该命令作用是:从另一个批处理程序调用这一个。\n"); } else if(strcmp(str,mini[12])==0) { printf(""); } else { printf("命令输入错误!\n\'%s\'",str); printf("不是内部或外部命令,也不是可运行的程序或批处理文件。\n"); } } return 0; }
四、 实验总结
通过练习实践,编写cmd有利于我们了解系统内部程序应用,有利于我们今后对操作系统的熟悉与学习。