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

专业:商软(2)班   姓名:列志华  学号:201406114254

一、        实验目的

(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.cpp

                 可执行程序名:MiniOS.exe

        2.      原理分析及流程图

本次实验主要是把命令放到记事本里面,最后通过程序来读取文档,这样的做法主要是方便更改数据。

在程序里建一个命令结构体,里面包含了命令名、命令功能、判断内部或外部命令的编号、参数,如:

      

 typedef struct node
{
char order[];
char exp[];
int post;
int arg;
struct node *next;
}ORDER;

最后通过用户输入的字符串,比较是否与记事本里面的命令名一样,相同则输出该命令的所有信息,

若不同则输出该命令不是内部命令或外部命令。如果用户输入exit,则程序结束。

        3.      主要程序段及其解释

 /*
  完成时间:  3.22 22:30 pm
  首次发表时间:3.22 22:53 pm
  修改时间:  3.24 22:09 pm
*/ #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<cstdlib> typedef struct node
{
char order[];
char exp[];
int post;
int arg;
struct node *next;
}ORDER;
int saveflag = ; void initInfo(ORDER *head)
{
ORDER *p,*z;
FILE *fp1;
int i;
z = head;
if((fp1 = fopen("cmd_1.txt", "a+")) == NULL)
{ //打开命令文件
printf("cmd_1.txt is NULL!!!");
return;
} for(i = ; !feof(fp1)&&fgetc(fp1)!=EOF ; i++)
{
p=(ORDER*)malloc(sizeof(ORDER));
fseek(fp1,-1L,SEEK_CUR);
fscanf(fp1,"%s%s%d%d",&p->order,&p->exp,&p->post,&p->arg);
p->next=NULL ;
z->next=p;/*构造链表*/
z=p;
}
fclose(fp1);
} //用于把大写字母转为小写字母
char toDownCase(char ch)
{
if(( 'A' <= ch) &&(ch <= 'Z'))
{
return (ch + );
}
return ch;
} //对用户的输入进行识别。
void discern(ORDER *head)
{
ORDER *p;
char user[];
int i = ,flag = ;
while()
{
printf("C:\\Users\\Administrator>");
scanf("%s",&user);
for(i= ; user[i] != '\0' ; i++)
user[i] = toDownCase(user[i]);
if(strcmp(user,"exit") == )
{ flag = ;
exit();
}
else if(strcmp(user,"help") == )
{
printf("有关某个命令的详细信息,请键入 HELP 命令名\n");
p = head->next;
while(p != NULL)
{ printf("%-9s%s\n",p->order,p->exp);
p = p->next;
}
flag = ;
printf("\n");
}
else if((strcmp(user,"\n") == ))
{
continue;
flag = ;
}
else
{
p = head->next;
flag = ;
while(p != NULL)
{
if(strcmp(user,p->order) == )
{
if(p->post == && p->arg == )
{
printf("‘%s’内部命令输入正确!\n",p->order);
printf("作用是:%s\n\n",p->exp);
}
else if(p->post == && p->arg == )
{
printf("'%s' 不是内部或外部命令,也不是可运行的程序或批处理文件。\n",p->order);
}
else
{
printf("命令语法不正确。没有参数!!!\n");
}
flag = ; }
p=p->next;
}
}
if(flag == )
{
printf("'%s' 不是内部或外部命令,也不是可运行的程序或批处理文件。\n",user);
} }
} void main()
{
ORDER *head,*p,*z; //系统的命令集合,和解析。
char user[]; //用户的输入。 head = (ORDER*)malloc(sizeof(ORDER));
head->next =NULL; printf("Microsoft Windows XP [版本 5.1.2600]\n");
printf("(C) 版权所有 1985-2001 Microsoft Corp.\n\n"); initInfo(head);
discern(head); }

测试结果与预期结果一样。

四、        实验总结

通过本次实验我进一步加深了对结构体和数组的了解,也学会了如何通过C语言读取记事本里面的数据内容。

通过询问同学和上网搜索相关知识,最后还是成功地解决了问题。

操作系统模仿CMD的更多相关文章

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

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

  2. cmd:WIN7操作系统下cmd窗口下的复制粘贴

    1.右击cmd的顶部栏,点开属性 2.在 选项 下,勾选"快速编辑模式" 3.按住鼠标左键标注需要复制的区域 再点击一下右键,则上文的标记区域就已经被复制了,可以通过ctrl+v进 ...

  3. windows10操作系统中cmd窗口下telnet功能失效的解决方案

    查找windows自带功能,在window10中相当方便.打开windows10的设置面板,在搜索栏中搜索“windows功能”,弹出以下界面: 根据弹出的提示“启动或停用windows功能”即可弹出 ...

  4. [Java] cmd命令行如何切换目录

    cmd.exe是微软Windows系统基于WINDOWS上的命令解释程序,类似于微软的DOS操作系统.cmd.exe是一个32位的命令行程序,运行在Windows NT/2000/XP/2003/vi ...

  5. SQL Server代理(2/12):作业步骤和子系统

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. SQL Server代理作业有一系列的一个 ...

  6. SQL Server代理(1/12):配置和概况

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. SQL Server代理是SQL Serv ...

  7. windows注册表学习笔记

    注册表,想起来了就学学,方便操作.无需把它当成重要学问,今日就学一波,作为了解. 一.注册表清理脚本 主要是删除临时文件,旧文件.并不能够删除无效的键 @echo off del/f/s/q %sys ...

  8. 关于oracle数据库(1)

    兼容性的设置 cmd.exe是微软Windows系统的命令行程序,类似于微软的DOS操作系统.cmd.exe是一个16/32位的命令行程序,运行在Windows NT/2000/XP/2003/Vis ...

  9. ODI 创建Java EE Agent

    Configuring the Domain for the Java EE Agent 一 创建数据库 Schema 配置 Java EE agent,之前,必须保证在数据中创建了相应的scheme ...

随机推荐

  1. PHP批量替换MySql数据库中的数据内容(替换MySql数据库内容源码)

    PHP批量替换MySql数据库内容 UTF-8 1.0版 <?php //声明 //1.本源码开发意图:作者在使用一些CMS建站的时候发现很多CMS把网址写入到数据库了,如果换网址,那么就需要更 ...

  2. jQuery实现的鼠标滑过切换图片代码实例

    jQuery实现的鼠标滑过切换图片代码实例:有时候网页需要这样的简单效果,那就是当鼠标滑过默认图片的时候,能够实现图片的切换,可能在实际应用中,往往没有这么简单,不过大家可以自行扩展一下,下面简单介绍 ...

  3. cshell学习

    一. 文件的读写执行: 1)读:可以显示该文件的内容 2)写:可以编辑或者删除它 3)执行:如果该文件是一个shell脚本或者程序. 如果希望一次设置目录下所有文件的权限,可使用:chmod 644 ...

  4. 有没有一行文件字过多后可以省略号显示,我说的不是用其他样式,BT本身有没有?谢谢

    .text-overflow {display: inline-block;max-width: 200px;overflow: hidden;text-overflow: ellipsis;whit ...

  5. webstrom配置node环境一张图片说明问题

  6. [HDU 4417] Super Mario (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给你n个数,下标为0到n-1,m个查询,问查询区间[l,r]之间小于等于x的数有多少个 ...

  7. 用HTML代码加载Unity内容(unity频道:http://unity3d.9ria.com/)

    Unity内容在浏览器通过Unity网络播放器插件加载.HTML代码与这个插件通常不直接通信,而是通过UnityObject的脚本帮助.其主要任务是Unity的内容嵌入一个非常简单的任务,通过从各种浏 ...

  8. ubuntu14安装ambari2.2

    https://cwiki.apache.org/confluence/display/AMBARI/Install+Ambari+2.2.0+from+Public+Repositories 查看是 ...

  9. 【转载】s3c2440裸机开发调试环境(MDK4.6,Jlink v8,mini2440)

    用于arm裸机程序开发的IDE基本有 以下3个:MDK,IAR,还有ADS.具体它们的具体情况在这里我就不多说了,百度一下就明白了.由于之前开发c51,stm32时候都使用了MDK开发环境,而且MDK ...

  10. 深度解析EM菌

    现在,在各大水族论坛里知道什么是EM菌的人不多,能正确说出EM菌的原理.成分和用途的人更是凤毛麟角,很多人对EM菌是否适用于水族箱存有疑虑,他们认为EM菌里大部分都是厌氧菌,因此不适合在水族箱这种好氧 ...