zoukankan      html  css  js  c++  java
  • 命令解释程序的编写实验

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

    商软1班   谭宇森  201406114139

    一、        实验目的

    (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>
    void header();
    void Input();
    void Output();
    struct Cmd{
    char cmd[30];
    char function[500];
    int post;
    };
    main()
    {
    header();
    Input();

    }
    void header()
    {
    printf("Microsoft Windows XP [版本 5.1.2600]\n");
    printf("<C> 版权所有 1985-2001 Microsoft Corp\n");
    }
    void Input()
    {
    printf("\n");
    char cmd[100];
    printf("Document and Setting\Administrator>:");
    scanf("%s",&cmd);
    if(strcmp(cmd,"dir")==0)
    printf("显示一个目录中的文件和子目录。");
    else if(strcmp(cmd,"cd")==0)
    printf("显示当前目录的名称或将其更改");
    else if(strcmp(cmd,"md")==0)
    printf("创建目录。");
    else if(strcmp(cmd,"rd")==0)
    printf("删除目录。");
    else if(strcmp(cmd,"cls")==0)
    printf("创建目录。");
    else if(strcmp(cmd,"date")==0)
    printf("显示或设置日期。");
    else if(strcmp(cmd,"time")==0)
    printf("显示或设置系统时间。");
    else if(strcmp(cmd,"ren")==0)
    printf("重命名文件。");
    else if(strcmp(cmd,"copy")==0)
    printf("将至少一个文件复制到另一个位置。");
    else if(strcmp(cmd,"javac ")==0)
    printf("将某一个java程序进行编译。");
    else if(strcmp(cmd,"java")==0)
    printf("运行某一个已编译的java文件。");
    else if(strcmp(cmd,"erase")==0)
    printf("删除至少一个文件。");
    else if(strcmp(cmd,"chkntfs")==0)
    printf("显示或修改启动时间磁盘检查。");
    else if(strcmp(cmd,"assoc")==0)
    printf("显示或修改文件扩展名关联。");
    else if(strcmp(cmd,"at")==0)
    printf("计划在计算机上运行的命令和程序.");
    else if(strcmp(cmd,"attrib")==0)
    printf("显示或更改文件属性。");
    else if(strcmp(cmd,"call")==0)
    printf("从另一个批处理程序调用这一个。");
    else if(strcmp(cmd,"help")==0)
    {
    printf("命令指示符有以下命令");
    printf("\ndir 显示一个目录中的文件和子目录。");
    printf("\ncd 显示当前目录的名称或将其更改。") ;
    printf("\nmd 创建目录。") ;
    printf("\nrd 删除目录。") ;
    printf("\ncls 清除屏幕。") ;
    printf("\ndate 显示或设置日期。") ;
    printf("\ntime 显示或设置系统时间。") ;
    printf("\nren 重命名文件。") ;
    printf("\ncopy 将至少一个文件复制到另一个位置。") ;
    printf("\njavac 将某一个java程序进行编译。") ;
    printf("\njava 运行某一个已编译的java文件。") ;
    printf("\nerase 删除至少一个文件。") ;
    printf("\nchkntfs 显示或修改启动时间磁盘检查。") ;
    printf("\nassoc 显示或修改文件扩展名关联。") ;
    printf("\nat 计划在计算机上运行的命令和程序。") ;
    printf("\nattrib 显示或更改文件属性。") ;
    printf("\ncall 从另一个批处理程序调用这一个。") ;
    }
    else
    printf("输入错误,没有这命令,可输入help查看指令。");
    //Output(cmd);
    printf("\n");
    Input();
    }

    4.      运行结果及分析

    四、        实验总结

    虽然方法有点蠢,但是已经有进步了,继续加油

  • 相关阅读:
    北京初“探”,还是初“谈”
    hadoop集群安装(多机,非伪集群)
    iOS8下注冊push方式变更
    Linux文件编辑命令具体整理
    HDU 1260
    二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)
    关于Linux静态库和动态库的分析
    JavaScript特效之前进,后退(返回上一级)
    具体解释Hibernate中的事务
    iOS开发
  • 原文地址:https://www.cnblogs.com/dalaotan/p/5319556.html
Copyright © 2011-2022 走看看