MiniOS系统

实验一  命令解释程序的编写

一、目的和要求

1. 实验目的

(1)掌握命令解释程序的原理;

(2)*掌握简单的DOS调用方法;

(3)掌握C语言编程初步。

2.实验要求

编写类似于DOS,UNIX的命令行解释程序

(1)自行定义系统提示符

(2)自定义命令集(8-10个)

(3)用户输入HELP以查找命令的帮助

(4)列出命令的功能,区分内部还是外部命令

(5)用户输入QUIT退出

(6)内部命令有dir, cd, md, rd, cls, date, time, ren, copy等。

  1 #include<stdio.h> 
  2 #include <stdlib.h> 
  3 # include<string.h> 
  4 main() 
  5 { 
  6     char cmd[20][20]={"dir","cd","md","rd","cls","date","time","ren", "copy","quit","help"}; 
  7     char str[10];  
  8     int i;  
  9     printf("Microsoft Windows XP [版本 5.1.2600]\n");
 10     printf("<c> 版权所有 1985-2001 Microsoft Corp\n\n");
 11     while(1){
 12         printf("C:Documents and Settingshskd>"); 
 13         gets(str); 
 14         strlwr(str);
 15         for(i=0;i<20;i++)
 16         { 
 17             { 
 18                 if(strcmp(str,cmd[0])==0) 
 19                 {
 20                     printf("类型:内部命令\n"); 
 21                     printf("显示一个目录中的文件和子目录。\n"); 
 22                     printf("\n"); 
 23                     printf("\n"); 
 24                     break; 
 25                 }
 26                 else if(strcmp(str,cmd[1])==0) 
 27                 {
 28                     printf("类型:内部命令\n"); 
 29                     printf("显示当前目录的名称或将其更改。\n"); 
 30                     printf("\n"); 
 31                     printf("\n"); 
 32                     break; 
 33                 }
 34                 else if(strcmp(str,cmd[2])==0) 
 35                 {
 36                     printf("类型:内部命令\n"); 
 37                     printf("创建一个新目录···\n"); 
 38                     printf("\n"); 
 39                     printf("\n"); 
 40                     break; 
 41                 }
 42                 else if(strcmp(str,cmd[3])==0) 
 43                 { 
 44                     printf("类型:内部命令\n"); 
 45                     printf("删除该目录....\n"); 
 46                     printf("\n"); 
 47                     printf("\n"); 
 48                     break; 
 49                 }
 50                 else if(strcmp(str,cmd[4])==0) 
 51                 {
 52                 /*printf("类型:内部命令\n"); 
 53                     printf("清屏···\n"); */
 54                     system("cls");
 55                     printf("\n"); 
 56                     printf("\n"); 
 57                     break; 
 58                 } 
 59                 else if(strcmp(str,cmd[5])==0) 
 60                 {
 61                     printf("类型:内部命令\n"); 
 62                     printf("显示或设置日期。\n"); 
 63                     printf("\n"); 
 64                     printf("\n"); 
 65                     break; 
 66                 } 
 67                 else if(strcmp(str,cmd[6])==0)
 68                 {
 69                     printf(" 类型:内部命令\n"); 
 70                     printf("内部命令显示或设置系统时间。\n"); 
 71                     printf("\n"); 
 72                     printf("\n"); 
 73                     break; 
 74                 }
 75                 else if(strcmp(str,cmd[7])==0) 
 76                 {
 77                     printf("类型:内部命令\n"); 
 78                     printf("重命名文件···\n"); 
 79                     printf("\n"); 
 80                     printf("\n"); 
 81                     break; 
 82                 }
 83                 else if(strcmp(str,cmd[8])==0) 
 84                 {
 85                     printf("类型:内部命令\n"); 
 86                     printf("将至少一个文件复制到另一个位置。\n"); 
 87                     printf("\n"); 
 88                     printf("\n"); 
 89                     break; 
 90                 } 
 91                 else if(strcmp(str,cmd[9])==0) 
 92                 { 
 93                     return 0;
 94                 } 
 95                 else if(strcmp(str,cmd[10])==0) 
 96                 {
 97                     //printf("类型:外部命令\n"); 
 98                     printf("dir\t内部命令 显示一个目录中的文件和子目录。\n"); 
 99                     printf("cd\t内部命令 显示当前目录的名称或将其更改。\n"); 
100                     printf("md\t内部命令 创建一个目录。\n"); 
101                     printf("rd\t内部命令 删除目录。.\n"); 
102                     printf("cls\t内部命令 清除屏幕。\n"); 
103                     printf("dte\t内部命令 显示或设置日期。\n"); 
104                     printf("time\t内部命令 内部命令显示或设置系统时间。\n"); 
105                     printf("ren\t内部命令 重新命名文件。\n"); 
106                     printf("copy\t内部命令 将至少一个文件复制到另一个位置。\n"); 
107                     printf("help\t外部命令 提供Windows命令的帮助信息。\n"); 
108                     printf("quit\t外部命令 退出命令解释程序\n");
109                     printf("\n"); 
110                     printf("\n"); 
111                     break;
112                 }
113                 else if(strcmp(str,cmd[i])!=0){ 
114                     printf("此命令不是内部或外部命令,也不是可运行的程序或批处理文件\n"); 
115                     printf("\n"); 
116                     break;
117                 }
118             }
119             }
120             }
121  }

四、实验总结

本次程序中仍有许多不明白的地方,只能做个简单的界面,对DOS命令更加了解

转载于:https://www.cnblogs.com/xiaochenxi/p/5319068.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
07-04
minios目前已经完成的功能:<br>bootsector<br>进入保护模式<br>内存分配模块<br>简单的线程调度模块<br>信号量<br>时钟<br>统一的设备驱动模型<br>标准输入输出设备驱动<br>内存及字符串相关的标准C库函数<br><br><br>附件codes.zip的目录结构如下:<br>codes<br>|-relocate 连接程序的源代码,将bootsector和minios连接成一个可启动的磁盘镜像<br>|-bootsector bootsector的源代码<br>|-minios minios的源代码<br>|-bin 所有的目标都在此目录中。其中minios.vhd就是可启动的磁盘镜像<br><br>如何启动minios:<br>你必须安装Microsoft的Virtual PC 2007<br>你可以在微软的官方网站下载他的安装程序,程序大小约30M<br>http://download.microsoft.com/download/8/5/6/856bfc39-fa48-4315-a2b3-e6697a54ca88/32%20BIT/setup.exe<br>安装完成后就可以双击codes/bin/vm.vmc运行minios了<br><br>如何编译minios:<br>编译minios共需要三种编译器。<br>codes/bootsector/bootsector.asm必须用nasm进行编译,将编译的结果命名为bootsector并且拷贝到codes/bin<br>codes/minios/platform/platform.asm必须用masm32进行编译,编译的结果在codes/minios/platform/platform.obj<br>其余的代码都用vc6编译即可,vc6的工程在codes/minios/minios.dsw<br>如果你手边没有nasm和masm32,不要紧,因为这两个文件一般不需要改动,直接用我编译好的目标文件就可以了<br><br>双击minios.dsw打开vc6,点击菜单Project->Project Setting->Debug,修改Executable for debug session一栏<br>将Virtual PC.exe的完整路径填入。如果你安装在默认的路径下,就不需要修改它。<br>然后直接Ctrl-F5运行就可以编译并且运行了。<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值