当前位置: 首页 > news >正文

操作系统实验一 命令解释程序的编写

一、目的和要求

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.PC微机

2.Windows 操作系统

3.C/C++程序开发集成环境

四、实验原理及核心算法参考程序段

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

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

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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define head0 "Microsoft Windows10 [版本 5.1.2600]"
#define head1 "<c>版权所有 1985-2001 Microsoft Corp."
#define head2 "C:\\Documents and Settings\\Administrator>"
struct CMD{
    char command[10];
    int type;
    char function[50];
};

typedef struct node{
    struct CMD data;
    struct node *next;
}cmd;

void search(cmd *l){
    cmd *p;
    p=l;
    char b[10];
    scanf("%s",b);
    getchar();
    while(p->next!=NULL){
        p=p->next;
        if(stricmp(b,p->data.command)==0){
            system(b);
            printf("\n");
        goto vc1;
        }
    }
    printf("\'%s\'不是内部或外部命令,也不是可运行的程序\n或批处理文件。\n",b);
    vc1:;
}

int main(){
    FILE *fp1;
    cmd *p,*q,*a;
    q=(cmd *)malloc(sizeof(cmd));
    q->next=NULL;
    p=q;
    fp1=fopen("cmd功能.txt","r");
    if(fp1==NULL){
        printf("不能打开文件");
        return 0;
    }    
    while(!feof(fp1)){
        a=(cmd *)malloc(sizeof(cmd));
        p->next=a;
        p=a;
        p->next=NULL;    
        fscanf(fp1,"%s %d %s",&p->data.command,&p->data.type,&p->data.function);
    }
    fclose(fp1);
    printf(head0"\n");
    printf(head1"\n\n");
    printf(head2);
vc2:search(q);
    printf(head2);    
    goto vc2;
}


转载于:https://www.cnblogs.com/qazwsxedcrfv/p/5315765.html

相关文章:

  • 从零搭建基于SpringBoot的秒杀系统(五):基于Shiro的人员登陆认证
  • 从零搭建基于SpringBoot的秒杀系统(六):使用RabbitMQ让订单指定时间后失效
  • 从零搭建基于SpringBoot的秒杀系统(七):高并发导致超卖问题分析处理
  • 从零搭建基于SpringBoot的秒杀系统(八):通过分布式锁解决多线程导致的问题
  • 读《世界是数字的》有感
  • 面试官问我:什么是静态代理?什么是动态代理?注解、反射你会吗?
  • redis入门到精通系列(十):springboot集成redis及redis工具类的编写
  • css3延时动画
  • redis入门到精通系列(十一):redis的缓存穿透、缓存击穿以及缓存雪崩详解
  • 子数组最大值设计02
  • redis入门到精通系列(十二):看完这一篇文章别再说不懂布隆过滤器
  • 如何用SpringBoot(2.3.3版本)快速搭建一个项目?文末有小彩蛋
  • Linux上find命令详解
  • 一步步带你看SpringBoot(2.3.3版本)自动装配原理
  • CCF系列之I’m stuck!(201312-5)
  • 【面试系列】之二:关于js原型
  • angular组件开发
  • Docker下部署自己的LNMP工作环境
  • java2019面试题北京
  • Javascript Math对象和Date对象常用方法详解
  • Python 基础起步 (十) 什么叫函数?
  • QQ浏览器x5内核的兼容性问题
  • Rancher-k8s加速安装文档
  • React 快速上手 - 07 前端路由 react-router
  • Swoft 源码剖析 - 代码自动更新机制
  • Vim 折腾记
  • VUE es6技巧写法(持续更新中~~~)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 基于遗传算法的优化问题求解
  • 基于游标的分页接口实现
  • 记一次和乔布斯合作最难忘的经历
  • 免费小说阅读小程序
  • 前端之Sass/Scss实战笔记
  • 整理一些计算机基础知识!
  • # 数据结构
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $(function(){})与(function($){....})(jQuery)的区别
  • $refs 、$nextTic、动态组件、name的使用
  • (+4)2.2UML建模图
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)基于IDEA的JAVA基础1
  • .net 无限分类
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET是什么
  • ::
  • [<MySQL优化总结>]
  • [1525]字符统计2 (哈希)SDUT
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [Angular] 笔记 21:@ViewChild