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

【操作系统原理实验】命令解释器模拟实现

选择一种高级语言如C/C++等,编写一类似于DOS、UNIX中的命令行解释程序。
1)设计系统命名行提示符;
2)自定义命令集(8-10个);
3)用户输入help命令以查找命令的帮助;
4)列出命令的功能,区分内部命令与外部命令;
5)用户输入quit退出。
(1)设计思想:

命令解释器流程图
在这里插入图片描述

(2)功能函数设计
void Init(struct Cmd cm[Max]);//命令初始化
void process(struct Cmd cm[Max]);//命令的实现
void display(struct Cmd cm[Max]);//显示所有命令
(3)具体实现
1、创建结构体cmd,包含命令、命令解释、命令标识(1:内部命令2:外部命令)
1.struct Cmd{
2. char cmd[30];//命令
3. char function[500];//命令作用
4. int post;//标志
5.};

2、命令初始化,创建文件cmd.txt,在文件中输入命令、命令解释、命令标识,将文件命令存入结构体中。
2.1调用fopen函数打开cmd.txt文件,a+:打开或新建一个文本文件,可以读,但只允许在文件末尾追写 。
2.2用循环对文件内容的读取,并将读取的内容存入Cmd中。

  1. while(!feof(fp)&&fgetc(fp)!=EOF){
  2.    fseek(fp,-1l,SEEK_CUR);  
    
  3.    //对文件内容的读取,并将读取的内容存入链表Cmd中  
    
  4.    fscanf(fp,"%s%s%d",&cm[count].cmd,&cm[count].function,&cm[count].post);  
    
  5.    count++;  
    
  6. }

3、显示命令,用for循环将结构体输出,当标识为1时,输出内部命令,标识为2时,输出外部命令。
4、命令的实现,创建数组key,和标识flag,模拟操作系统。
4.1进行while循环直到key为quit时,输出“程序结束!”,当key为help时,调用命令显示函数,将标志置为1,表示输入的命令能够在结构体中找到。

  1. if(strcmp(key,“help”)==0){
  2.        printf("命令详情,help\n");  
    
  3.        display(cm);  
    
  4.        flag=1;  
    
  5.    }
    

4.2否则当key和结构体中命令匹配时,判断命令标识,当命令标识为1时,表示内部命令输入正确,命令标识为0时,表示外部命令输入正确。用系统调用cmd去处理命令,将标志置为1。
1.for(i=0;i<count;i++){
2. if(strcmp(key,cm[i].cmd)0){
3. if(cm[i].post
1)
4. printf(“%s 内部命令输入正确\n “,strupr(cm[i].cmd));
5.
6. else
7. printf(”%s 外部命令输入正确\n”,strupr(cm[i].cmd));
8. }
9. system(key);//系统调用cmd去处理命令
10. flag=1;
11. break;
12. }

4.3若标志为0,即输出的字符串在结构体中找不到,且key不为quit,则报错。输出该命令不是内部或外部命令,也不是可运行的程序。
(4)结果演示:
(1)当输入命令“help”时,程序如下:
在这里插入图片描述

(2)当输入命令“dir”时,程序如下:
在这里插入图片描述

(3)当输入命令“cls”时,程序如下:
在这里插入图片描述

(4)当输入命令“cls”或者当输入命令“calc”时,程序如下:
在这里插入图片描述

相关文章:

【操作系统原理实验】命令解释器模拟实现

选择一种高级语言如C/C等&#xff0c;编写一类似于DOS、UNIX中的命令行解释程序。 1)设计系统命名行提示符&#xff1b; 2)自定义命令集&#xff08;8-10个&#xff09;&#xff1b; 3)用户输入help命令以查找命令的帮助&#xff1b; 4)列出命令的功能&#xff0c;区分内部命令…...

使用nvm管理node版本

下载nvm版本参考文章&#xff1a;https://blog.csdn.net/langmanboy/article/details/126357952下载安装选择nvm的目录为d:\nvm&#xff0c;nodejs的目录为d:\nodejs&#xff1a;v14.0.0&#xff1a;执行nvm install 14生成的目录v16.0.0&#xff1a;执行nvm install 16生成的目…...

jQuery BootStrap

1、jQuery的使用方式 1、下载jQuery库文件 网址 2、将下载好的js文件放到项目中&#xff0c;并引入到需要的HTML文件中 3、使用jQuery 注意&#xff1a;jQuery库文件的导入必须在自己写的代码之前。就绪函数在页面上可以写n个。 <!DOCTYPE html> <html lang"en…...

Vue2.0开发之——购物车案例-Footer组件封装(50)

一 概述 导入Footer子组件定义fullState计算属性把全选状态传递给Footer子组件实现全选功能 二 导入Footer子组件 2.1 App.vue中导入Footer组件 import Footer from "/components/Footer/Footer.vue";2.2 App.vue中注册Footer子组件 components: {Header,Goods,F…...

HTML基本概述

文章目录网站和网页浏览器的作用HTML标签元素注释乱码问题web系统是以网站形式呈现的&#xff0c;而前端是以网页形式呈现的。 网站和网页 网站&#xff08;web site&#xff09;&#xff1a;互联网上用于展示特定内容的相关网页的集合。也就是说&#xff0c;一个网站包含多个…...

Vue 3.0 响应式 计算和侦听 【Vue3 从零开始】

本节使用单文件组件语法作为代码示例 #计算值 有时我们需要依赖于其他状态的状态——在 Vue 中&#xff0c;这是用组件计算属性处理的&#xff0c;以直接创建计算值&#xff0c;我们可以使用 computed 方法&#xff1a;它接受 getter 函数并为 getter 返回的值返回一个不可变的…...

1.mbedtls移植到STM32

mbedtls学习笔记 1.关于mbedtls2.STM32移植方法2.1STM32cubemx移植2.2手动移植12.3移植总结2.4手动移植22.4.1移植方式22.4.2测试SHA1加密1.关于mbedtls 1.主要提供了的 SSL/TLS 支持(在传输层对网络进行加密),各种加密算法,各种哈希算法,随机数生成以及 X.509(密码学里…...

模块、包和异常

目录1.模块import 导入from...import 导入2. 模块的搜索顺序3. __name__属性的使用4. 包包的使用步骤5. 发布模块6. 安装模块7. 卸载模块8. pip 安装第三方模块9. 异常处理异常捕获异常的传递抛出 raise 异常1.模块 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py …...

RocketMQ控制台的安装与启动

RocketMQ控制台的安装与启动下载修改配置开放端口号重启防火墙添加依赖编译 rocketmq-dashboard运行 rocketmq-dashboard本地访问rocketmq无法发送消息失败问题。connect to &#xff1c;公网ip:10911&#xff1e; failed下载 下载地址 修改配置 修改其src/main/resources中…...

pytorch安装的超级详细教程(没有之一)

一、发展历程 &#xff08;简单介绍&#xff09; (15年)caffe --> (16年)tensorflow1.x --> (17年)keras --> (18年)Tensorflow2.x --> (19年)pytorch。 面向gihub开源项目编程。 向下支持比较好&#xff0c;各个版本之间支持比较好&#xff0c;兼容性强。 版本…...

leetcode两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...

断点调试(debug)

目录 F8案例 ​编辑 debug过程中报错 ​编辑用debug查看方法源码 一层一层查看 Arrays.sort()方法 F9 DebugExercise 介绍&#xff1a;断点调试是指在程序的某一行设置一个断电&#xff0c;调试时&#xff0c;程序运行到这一行就会停住&#xff0c;然后可以一步步往下调试…...

Vuex 状态管理

文章目录Vuex概述安装单向数据流Vuex核心概念StatemapState 辅助函数扩展运算符GettermapGetters 辅助函数Mutation提交载荷提交载荷对象对象风格提交使用常量替代mutation事件类型Action异步分发Module命名空间Vuex 概述 Vuex 是一个状态管理库&#xff0c;用于管理 Vue.js …...

射频功率放大器在辉光放电特征及风速测量原理中的应用

实验名称&#xff1a;辉光放电特征及风速测量原理研究方向&#xff1a;辉光放电测试设备&#xff1a;信号发生器、ATA-8202射频功率放大器&#xff0c;热成像仪、万用表、等离子体传感器实验过程&#xff1a;在等离子体形成条件和流场响应机制的基础上&#xff0c;可以明确影响…...

keepalived+nginx 双机热备搭建

keepalivednginx 双机热备搭建一、准备工作1.1 准备两台centos7.91.2 nginx 与 keepalived软件 双机安装1.3 ip分配1.4 修改主机名1.5 关闭selinux&#xff08;双机执行&#xff09;1.6 修改hosts&#xff08;双机执行&#xff09;二、安装keepalived2.1 执行一下命令安装keepa…...

零基础如何入门学习Python?

阶段一&#xff1a;Python开发基础 Python全栈开发与人工智能之Python开发基础知识学习内容包括&#xff1a;Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。 阶段二&#xff1a;Python高级编程和数据库开发 Python全栈开发与人…...

认识CSS之基础选择器

&#x1f31f;所属专栏&#xff1a;前端只因变凤凰之路&#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚&#x1f62e;前言&#xff1a;该系列将持续更新前端的相关学习笔记&#xff0c;欢迎和我一样的小白订阅&#xff0c;一起学习共同进步~&#x1f449;文章简…...

JavaScript面试题整理汇总

1、面试官&#xff1a;说说JavaScript中的数据类型&#xff1f;存储上的差别&#xff1f;在JavaScript中&#xff0c;我们可以分成两种类型&#xff1a;基本类型和复杂类型。两种类型的区别是&#xff1a;存储位置不同基本类型主要为以下6种&#xff1a;NumberStringBooleanUnd…...

科普| 什么是云原生?

“新冠疫情从根本上改变了商业模式&#xff0c;工作流向在线迁移的速度比以往任何时候都要快。越来越多的公司和消费者依靠电子商务“ B2B”和B2C”&#xff0c;以及网上银行促进创新以满足日益增长的客户需求&#xff0c;云原生技术在其中发挥重要作用&#xff0c;同时也加速了…...

Spring Boot 3.0系列【9】核心特性篇之依赖管理

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言依赖管理1. dependencyManagement、parent2. spring-boot-starter-parent3. spring-boot-dependencies4. 实际开发中的…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...