热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

实验一、命令解释程序的编写一、实验目的(1)掌握命令解释程序的原理;(2)掌握简单的DOS调用方法࿱

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

    (1)掌握命令解释程序的原理;

    (2)掌握简单的DOS调用方法;

    (3)掌握C语言编程初步。

二、 实验内容和要求

     1、实验内容:根据教师指定的实验课题,完成设计、编码、测试工作。

     2、实验要求:编写类似于DOS,UNIX的命令行解释程序

      (1)自行定义系统提示符

      (2)自定义命令集(8-10个)

      (3)用户输入HELP以查找命令的帮助

      (4)列出命令的功能,区分内部还是外部命令

      (5)用户输入QUIT退出

      (6)内部命令有dir, cd, md, rd, cls, date, time, ren, copy等。

三、 实验方法、步骤及结果测试

      1、实验方法:运用C语言中的while循环语句来控制整个命令解释程序,在循环内运用if和else if语句,条件就利用strcmp函数进行筛选。

      2、实验步骤:先定义两个字符串数组,一个存放输入的显示提示符,另一个提前定义好相关命令dir, cd, md, rd, cls, date, time, ren, copy等。然后用while循环语句嵌套if和else if语句。当输入命令正确显示此命令的解释,若输入为外部命令,显示输入错误需重新输入。

      3、源代码:

1 void process(struct Cmd cm[Max])
2 {
3 char str[10];
4 printf("Microsoft Windows XP [版本 5.1.2600]\n");
5 printf("(C) 版权所有 1985-2001 Microsoft Corp.\n");
6 while(strcmp(str,"quit")!=0)//循环
7
8 {
9 printf("\nC:\\Documents and Settings\\hskd>");
10 scanf("%s",str);
11 strlwr(str);
12 bool flag=false;
13 if(strcmp(str,"help")==0)
14 {
15 printf("有关某个命令的详细信息,请键入 HELP 命令名\n");
16 display(cm);
17 flag=true;
18 }else{
19 for(int i=0;i)
20 {
21 if(strcmp(str,cm[i].cmd)==0) //比较用户输入的字符串与文件存储的关键字命令名称是否相等
22 {
23 if(cm[i].post==1)
24 {
25 printf("'%s' 内部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function);
26 printf("%s\n",&cm[i].parameters);
27 }
28 else
29 {
30 printf("'%s' 外部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function);
31 printf("%s",&cm[i].parameters);
32 }
33 flag=true;
34 break;
35 }
36 }
37 if(!flag){
38 if(strcmp(str,"quit")!=0)
39 printf("'%s' 不是内部或外部命令,也不是可运行的程序\n或批处理文件。\n",str);
40 }
41 }
42 }
43 printf("\n程序结束!\n\n");
44 }

 

4.运行结果及分析:

运行结果与预期一致。

四、 实验总结

     在这次用C语言编写系统命令解程序中,不仅加强了对命令程序的编译思路,同时回顾了C语言对检索调用函数的使用,对以往大一的编写函数进行回忆和加深使用,在写解释程序中,从刚开始的一味用代码进行文字数据输出,到调用数组和循环来化简代码量,达到一致的效果。 

 

转:https://www.cnblogs.com/chengyansheng/p/5316981.html



推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
author-avatar
小新没蜡笔775
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有