【操作系统原理实验】命令解释器模拟实现
创始人
2024-05-29 17:55:08
0

选择一种高级语言如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
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”时,程序如下:
在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...