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

专业:商软(2)班   姓名:韩麒麟 学号:201406114253

一、 实验目的

(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. 源程序名:压缩包文件中源程序名 MiniOS.cpp

                 可执行程序名:MiniOS.exe

  2.原理分析及流程图

本次实验主要是把命令放到记事本里面,最后通过程序来读取文档,这样的做法主要是方便更改数据。在程序里建一个命令结构体,里面包含了命令名、命令功能、判断内部或外部命令的编号、参数,如 最后通过用户输入的字符串,比较是否与记事本里面的命令名一样,相同则输出该命令的所有信息,若不同则输出该命令不是内部命令或外部命令。如果用户输入exit,则程序结束。

  3.主要程序段及其解释

#include<stdio.h>
#include<stdlib.h>
#include<string.h> typedef struct node
{
char order[];
char exp[];
struct node *next;
}ORDER;
int saveflag = ; void InputInfo(ORDER *head)
{
ORDER *p,*r,*s;
int i;
char ord[];
s=head;
while(s->next!=NULL)
s=s->next;
while()
{
BB:
r=head->next; printf("\n\n\n请输入命令:(0为退出)");
scanf(" %s",ord);
if(strcmp(ord,"")==)
break; while(r!=NULL)
{
if(strcmp(r->order,ord)==)
{
printf("\n信息已存在,输入无效,请重新输入:");
goto BB;
}
r=r->next;
}
p=(ORDER*)malloc(sizeof(ORDER));
strcpy(p->order,ord);
printf("请输入解释:\n");
scanf("%s",p->exp);
p->next=NULL;
s->next=p;
s=p;
saveflag=; }
} void Open(){
char order[];
char c[];
int i;
FILE *p1=fopen("MiniOS.txt","r");
if(!p1)
printf("打开失败\n"); for(i=;i<;i++)
{
fscanf(p1,"%c",&c[i]);
printf("%c",c[i]);
}
fclose(p1);
printf("\n\n");
if(strcmp(order,"exit")==){
return ;
}
} void Save(ORDER *l)
{
FILE *f;
ORDER *p;
int count=,flag=;
f=fopen("cmd_1.txt","wb");
if(f==NULL)
{
printf("the file can't be opened!");
return ;
}
p=l->next;
while(p->next != NULL)
{
if(fwrite(p,sizeof(ORDER),,f)==)
{
p=p->next;
count++;
}
else
{
flag=;
break;
}
}
if(flag)
{
printf("\n保存\n");
saveflag=;
}
fclose(f);
} void main()
{
ORDER *osOrder,*head,*p,*z; //系统的命令集合,和解析。
char user[],ch1; //用户的输入。
int i;
FILE *fp1;
head = (ORDER*)malloc(sizeof(ORDER));
head->next =NULL;
z = head; if((fp1 = fopen("cmd_1.txt", "ab+")) == NULL)
{
printf("cmd_1.txt is NULL!!!");
return;
}
printf("Microsoft Windows XP [版本 5.1.2600]\n");
printf("(C) 版权所有 1985-2001 Microsoft Corp.\n\n");
for(i = ; !feof(fp1) ; i++)
{
p=(ORDER*)malloc(sizeof(ORDER));
if(fread(p,sizeof(ORDER),,fp1) == )
{ p->next=NULL ;
z->next=p;
z=p;
}
}
fclose(fp1); p = head->next; while()
{ printf("C:\\Users\\Administrator>");
scanf("%s",&user); if(strcmp(user,"exit") == )
{
if(saveflag==)
{
getchar();
printf("\n文档信息发生改变,是否进行保存(y/n)?\n");
scanf("%c",&ch1);
if(ch1=='y' || ch1=='Y')
{
Save(head);
printf("\n保存成功!\n");
}
}
exit();
}
else if(strcmp(user,"editor") == )
{
InputInfo(head); }
else if(strcmp(user,"help") == )
{
Open();
/* p = head->next;
while(p != NULL)
{
printf("%-9s%s\n",p->order,p->exp);
p = p->next;
}*/ }
else if(strcmp(user,"\n")==)
{
system("dir");
} else
{
p = head->next;
while(p != NULL)
{
if(strcmp(user,p->order) == )
{ printf("内部命令!\n");
printf("作用为:");
printf("%s\n\n",p->exp);
}
p=p->next;
}
}
}
}

0325 实验一操作系统模拟cmd的更多相关文章

  1. 实验一 操作系统模仿cmd

    实验一.命令解释程序的编写 专业:商软(2)班   姓名:王俊杰  学号:201406114252 一.        实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3 ...

  2. 【iCore3 双核心板】例程十四:FATFS实验——文件操作

    实验指导书及代码包下载: http://pan.baidu.com/s/1dEpechF iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  3. 【GMT43智能液晶模块】例程十三:FATFS实验——文件操作

    实验原理: STM32F429上带有SDIO控制器,GMT43液晶模块上将SDIO连接到TF卡座.本实验 将Micro SD卡插入TF卡座上即可.通过FATFS创建test.txt文件,并且写入数据0 ...

  4. 【iCore4 双核心板_ARM】例程十四:FATFS实验——文件操作

    实验现象: 核心代码: int main(void) { int i,j; FIL file; FATFS fatfs; static FRESULT res; unsigned ]; unsigne ...

  5. 实验一 命令解释程序cmd的编写

    #include<stdio.h>#include<stdlib.h>#include<string.h>#define N 30main(){ char str[ ...

  6. <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目

    项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...

  7. 操作系统实验——PV操作实现生产者消费者模型

    操作系统PV操作之--生产者消费者模型 个人博客主页 参考资料: Java实现PV操作 | 生产者与消费者 浙大公开课 在操作系统的多进程.多线程操作中经常会有因为同步.互斥等等问题引发出的一系列问题 ...

  8. Windows常用批处理命令 CMD BAT (CMD目录操作等dir)

    Windows常用批处理 CMD BAT CMD获取文件夹下所有文件的名称并打印(输出)到指定目录 dir C:\Users\\Desktop\png\*.*/s >c:\.txt //cmd ...

  9. Oracle11g R2学习系列 之四Maven+Struts+Spring实验

    今天试一下Java调用Oracle来看一下.会不会也如昨天实验的一样坑呢?由于我对于Java也接触的不多,所以不打算直接使用该收提供的实验文档,而是自己利用Maven+Struts+Spring来自己 ...

随机推荐

  1. 20155310《Java程序设计》实验五(网络编程与安全)实验报告

    20155310<Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 •任务一: 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上 ...

  2. eclipse 打包maven项目的坑

    一.问题: 公司开发了一个项目,需要作为后台服务运行,整个项目的构成是:[maven + spring + eclipse] 在使用打包的时候遇到许多问题: (1)eclipse中maven工具的集成 ...

  3. dat类型文件入库后校验数据有问题

    一.问题: dat或者txt文件入库后,字段进行正则校验报出不应该出现的错误 二.排查: (1)根据报出的错误,把错误日志中的字串单独提取出来,进行正则校验发现没有问题 (2)可以想到,要不是程序问题 ...

  4. 从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社

    从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社 PPT链接: https://pan.baidu.com/s/1i5Jrr1N 视频链接: https: ...

  5. day 2 异常传递 ,抛出

    1.异常的传递 def test1(): print("---test1--") print(num) print('---test1 over---') def test2(): ...

  6. Luogu3804 【模板】后缀自动机

    题面 题解 一个串的出现次数等于$endpos$的大小,也是$parent$树上节点的$size$大小, 构建出后缀自动机,按拓补序,模拟即可. 代码 #include<cstdio> # ...

  7. L013-linux基础正则表达式手把手实战讲解小节

    L013-linux基础正则表达式手把手实战讲解小节 这么一看又有10天没更新博客了,最近也一直在学就是时间比较闲散,再加上做上次老师留的十多道题,所以时间比较紧张,本来做完题准备直接先看L014讲解 ...

  8. 写一个 setter 方法用于完成 @property (nonatomic, retain) NSString *name,

    写一个 setter 方法用于完成 @property (nonatomic, retain) NSString *name 写一个 setter 方法用于完成 @property (nonatomi ...

  9. Spring学习(十二)-----Spring @PostConstruct和@PreDestroy实例

    实现 初始化方法和销毁方法3种方式: 实现标识接口 InitializingBean,DisposableBean(不推荐使用,耦合性太高) 设置bean属性 Init-method destroy- ...

  10. 宿主机ssh免密登录docker容器

    一.检查系统内核 二.安装docker 1.yum install docker  -y 2.docker version                    #查看docker版本 3.syste ...