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

商软1班   杨晶晶  201406114102

一、        实验目的

(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等。

三、        实验方法、步骤及结果测试

 1.      源程序名:MiniOS.c

可执行程序名:MiniOS.exe

2.      原理分析及流程图

1. 命令解释程序的原理:

命令解释程序的主要功能是:

接受和执行一条用户从键盘输入的命令,它通常保存一张命令名字(动词)表,其中记录着所有操作命令及其处理程序的入口地址或有关信息。

2. 命令解释程序实现的两种方式 :

1) 一种是它自身包含了命令的执行代码;

2) 另一种是由专门的“系统程序” 实现,自身不含命令处理代码,也不进行处理,仅仅把这条命令对应的命令文件装入内存执行。例如:在DOS操作系统中,dir、cd、cls等命令的执行代码包含在系统自身内核中,称为内部命令;format、help等命令的执行代码在外部文件中,称为外部命令。

3. 编程实现流程

显示程序提示信息;

While(1)

{ 显示提示符;

接收键盘的字符串;

判断是否quit程序退出指令,是则退出;

判断是否内部命令,并给出相应的信息,否则给出错误信息;

显示退出程序信息;

首先查了cmd有哪些命令指示符,分别有什么作用,在自己电脑的cmd输入一些字符看对应的结果。通过在自己电脑输入命令指示符复制到程序的显示输出中,使得用起来像真的一样。

3.      主要程序段及其解释:

 #include<stdio.h>
#include<string.h> //在使用到字符数组时需要使用
#include<stdlib.h>
void main()
{
int system(const char *string);
//定义数组中的值
char cmd[][]={"dir","cd","md","rd","cls","date","time","ren","copy","help","quit"};
char str[];
//Init(str);
printf("Microsoft Windows [版本 10.0.10240]\n");//设置标题
printf("(C) 2015 Microsoft Corporation. All rights reserved.\n");
while()//进入函数循环
{
printf("\nC:\\Users\\yj>");
gets(str);
int i,date;
for(i=; '\0' != str[i]; i++)//for循环遍历s串
{
if(str[i] >= 'A' && str[i] <= 'Z') //判断是不是大写字母
str[i] += ; //转换成小写
}
if(strcmp(str,cmd[])==)//判断输入单词是否与cmd数组中的对应
{
//system(str);
printf("dir 内部命令:显示一个目录中的文件和子目录\n");
printf("\n驱动器 C 中的卷是 系统\n卷的序列号是 0E33-63F0\n\nC:\Users\yj 的目录\n\n2016/03/19 15:47 <DIR> .\n2016/03/10 16:28 <DIR> Music\n2016/03/12 17:20 <DIR> OneDrive\n2016/03/10 16:28 <DIR> Pictures\n2016/03/10 16:28 <DIR> Saved Games\n2016/03/10 16:28 <DIR> Searches\n2016/03/10 16:28 <DIR> Videos\n 4 个文件 2,159 字节\n 19 个目录 33,779,773,440 可用字节\n");
}
else if(strcmp(str,cmd[])==)
{
printf("C:\\Users\\yj\n");
printf("cd 内部命令:显示当前目录的名称或将其更改\n");
}
else if(strcmp(str,cmd[])==)
{
system("md");
printf("md 内部命令:建立一个目录或文件夹.dos下面习惯叫目录,win下面习惯叫文件夹\n");
}
else if(strcmp(str,cmd[])==)
{
system("rd");
printf("rd 内部命令:删除目录\n");
}
else if(strcmp(str,cmd[])==)
{
system("cls");
printf("cls 内部命令:清除屏幕\n");
}
else if(strcmp(str,cmd[])==)
{
printf("date 内部命令:显示或设置日期\n");
printf("当前日期: 2016/03/24 周四\n输入新日期: (年月日):\n");
}
else if(strcmp(str,cmd[])==)
{
printf("当前时间: 21:45:07.86\n");
printf("time 内部命令:显示或设置系统时间\n");
}
else if(strcmp(str,cmd[])==)
{
printf("ren 内部命令:重新命名文件,ren命令的格式是:ren 源文件名目的文件名\n");
}
else if(strcmp(str,cmd[])==)
{
printf("copy 内部命令:将至少一个文件复制到另一个位置\n");
}
else if(strcmp(str,cmd[])==)
{
printf("dir 显示一个目录中的文件和子目录\n");
printf("cd 显示当前目录的名称或将其更改\n");
printf("md 建立一个目录或文件夹.dos下面习惯叫目录,win下面习惯叫文件夹\n");
printf("rd 删除目录\n");
printf("cls 清除屏幕\n");
printf("date 显示或设置日期\n");
printf("time 显示或设置系统时间\n");
printf("ren 重新命名文件,ren命令的格式是:ren 源文件名目的文件名\n");
printf("copy 将至少一个文件复制到另一个位置\n");
printf("help 提供Windows命令的帮助信息\n");
printf("quit 退出命令解释程序\n");
printf("\n有关工具的详细信息,请参阅联机帮助中的命令行参考。\n");
}
else if(strcmp(str,cmd[])==)
return;
else
{
printf("'%s' 不是内部或外部命令,也不是可运行的程序\n或批处理文件。\n",str);
}
}
}

4.      运行结果及分析

四、        实验总结

一开始觉得这个没什么,听老师说还以为挺简单的,就让用户输入命令符然后输出对应的文字就行啦,可是打代码才发现自己会漏了很多细节的地方,比如要考虑输入是否区分大小写、能否让自己做的也实现真的cmd的功能。因为能力有限,只能做比较简单的内容,实现显示处理命令符的内容是在cmd打相应的命令符把对应的内容复制过去,也尝试了用system(str)的方法直接调用。看了老师的代码发现用读取文档的方式修改会比较方便,而且看起来比较整洁,用结构体的方法更好存放数据,要多学习。

 

 

 

 

 

 

实验一 MiniOS的更多相关文章

  1. OS实验一实验报告

    实验一.命令解释程序的编写实验 专业:商业软件工程   姓名:王泽锴  学号:201406114113 一.实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语 ...

  2. 实验一 操作系统模仿cmd

    实验一.命令解释程序的编写 专业:商软(2)班   姓名:王俊杰  学号:201406114252 一.        实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3 ...

  3. 0325 实验一操作系统模拟cmd

    实验一.命令解释程序的编写 专业:商软(2)班   姓名:韩麒麟 学号:201406114253 一. 实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3)掌握C语言编程 ...

  4. [原] 利用 OVS 建立 VxLAN 虚拟网络实验

    OVS 配置 VxLAN HOST A ------------------------------------------ | zh-veth0(10.1.1.1) VM A | | ---|--- ...

  5. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

  6. SEED实验系列文章目录

    美国雪城大学SEEDLabs实验列表 SEEDLabs是一套完整的信息安全实验,涵盖本科信息安全教学中的大部分基本原理.项目组2002年由杜文亮教授创建,目前开发了30个实验,几百所大学已采用.实验楼 ...

  7. 物联网实验4 alljoyn物联网实验之手机局域网控制设备

    AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...

  8. (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)

    一.  HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...

  9. (原创) alljoyn物联网实验之手机局域网控制设备

    AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...

随机推荐

  1. c++类模板分文件编写存在的问题

    c++分文件编写的编译机制: 各个文件独立编译,如果在某.cpp文件中出现了函数调用,但是在此.cpp文件并没有对应函数的实现.此时就会在函数调用出生成特定的符号,在之后的链接过程完成函数调用. C+ ...

  2. dns欺骗之ettercap

    ettercap是一个基于ARP地址欺骗方式的网络嗅探工具,主要适用于局域网. ettercap是一款现有流行的网络抓包软件,它利用计算机在局域网内进行通信的ARP协议的缺陷进行攻击,在目标与服务器之 ...

  3. Linux入门第五天——shell脚本入门(下)基础语法之循环

    一.循环 1.不定循环 有两种形式: while [ condition ] <==中括号内的状态就是判断式 do <==do 是循环的开始! 程序段落 done <==done 是 ...

  4. 【常用】IDEA常用快捷键与操作

    以下出场顺序为开始学习IDEA时遇到的顺序,并非实际中的使用频率,最终版待整理 0.“ctrl+space(由于习惯问题我已经更改为alt+/)”——基本提示 “ctrl+shift+space”—— ...

  5. 2017-2018-1 20155320加分项目——pwd的实现

    2017-2018-1 20155320加分项目--pwd的实现 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd ...

  6. C#基础之反射

    虽然还在学校读书,反射实际写的不多.但感觉反射在程序开发中用得还是挺多的,对我来说也是.NET中的一个难点.通过反射,我们可以在运行时获得.NET中的每一个类型的成员,这些类型包括类.结构.委托和枚举 ...

  7. DSP5509项目之用FFT识别钢琴音调(5)之开始傅里叶变换

    1. 首先电脑上下载一个音频模拟的软件 2. 研究下钢琴的声音范围27HZ到4000HZ,那么采样频率需要是信号的两倍频率以上,所以建议采样频率是16KHZ.先看一下采集到的数据,如下是空载时候采集到 ...

  8. arcpy示范教学(一):基本操作

    arcpy基本操作 打开目录,遍历目录,打开要素类,遍历要素,打开文件,写入属性值 import arcpy import codecs # 设置工作目录 arcpy.env.workspace = ...

  9. springAOP之代理模式

    springAOP指的是在spring中的AOP,什么是AOP,相对于java中的面向对象(oop),在面向对象中一些公共的行为,像日志记录,权限验证等如果都使用面向对象来做,会在每个业务方法中都写上 ...

  10. 深入解析QML引擎, 第2部分: 绑定(Bindings)

    原文  QML Engine Internals, Part 2: Bindings 译者注:这个解析QML引擎的文章共4篇,分析非常透彻,在国内几乎没有找到类似的分析,为了便于国内的QT/QML爱好 ...