• 实验一 命令解释程序


     

     

     

    一、实验目的

    (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. 1.     源程序名:压缩包文件(rarzip)中源程序名0311.c

          可执行程序名:0311.exe

    1. 2.     原理分析及流程图  

          用文件读写的方式将命令及命令作用存入结构体数组

          命令解释程序的原理:

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

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

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

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

              另一种是由专门的“系统程序” 实现,自身不含命令处理代码,也不进行处理,仅仅把这条命令对应的命令文件装入内存执行。

    1. 3.     主要程序段及其解释:
    复制代码
    #include <stdio.h>
    #include <string.h>
    
    struct
    {
        char character[50];//命令字符
        char explain[200];//命令解释
        int category;//命令分类 1-内部命令 0-外部命令
    }typedef command;
    
    int count = 0;
    command cmd[30];
    
    void Init()//读取文件
    {        
        FILE *fp;
        if((fp=fopen("cmd.txt","a+"))!=NULL)
        {
            while(!feof(fp)&&fgetc(fp)!=EOF)
            {
                fseek(fp,-1L,SEEK_CUR);
                fscanf(fp,"%s%s%d",&cmd[count].character,&cmd[count].explain,&cmd[count].category);
                count++;
            }
        }else
            printf("fail to open");
        fclose(fp);
    
    }
    void Title()//打印标题
    {
        printf("Microsoft Windows [版本 10.0.10586]
    ");
        printf("(c) 2015 Microsoft Corporation。保留所有权利。
    ");
    
    }
    void Processing(char *ch)//处理函数
    {
        int i = 0;
        char key;
        if(!strcmp(ch, "help"))
        {
            for(i = 0; i < count; i++)
            {
                printf("%s	", cmd[i].character);
                printf("%s
    ", cmd[i].explain);
            }
        }else
        {
            for(i = 0; i < count; i++)
            {
                if(!strcmp(ch, cmd[i].character))
                {
                    if(cmd[i].category == 1)
                        printf("%s为内部命令
    ", cmd[i].character);
                    else
                        printf("%s为外部命令
    ", cmd[i].character);
                    printf("作用是:%s
    ", cmd[i].explain);
                    getchar();//清除缓存
                    printf("是否执行该命令(y/n):");
                    scanf("%c", &key);
                    if(key == 'y' || key == 'Y')
                        system(cmd[i].character);
                    break;
                }
            }
            if(i == count)
                printf("'%s' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ", ch);
        }
    }
    
    int main(void)
    {
        char ch[30];
        char *p;
        Init();    
        Title();
        do
        {
            printf("
    C:\>");
            scanf("%s", ch);
            p = strlwr(ch);//将大写字符转化为小写字符
            Processing(p);
        }while(strcmp(ch, "quit"));
    
        return 0;
    }
    复制代码
  • 相关阅读:
    sql 变量赋值
    mysql 行号 获取指定行数据
    SQL Server获取指定行的数据
    sql server 创建内联表值函数
    sql server 表变量存储临时查询数据
    sql server 循环操作
    oracle for in 学习
    oracle C# 访问
    sql server insert values 多值 与oracle 的不同
    mysql 如何选择随机行
  • 原文地址:https://www.cnblogs.com/zhangguojing/p/5303485.html
Copyright © 2020-2023  润新知