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

专业:商软(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. golang 错误处理与异常

    原文地址 golang 中的错误处理的哲学和 C 语言一样,函数通过返回错误类型(error)或者 bool 类型(不需要区分多种错误状态时)表明函数的执行结果,调用检查返回的错误类型值是否是 nil ...

  2. IC设计笔试面试小问题总结(随时更新)-IC设计笔记(三)

    都是一些细节性问题,放在一起记忆,一问一答的形式,有任何问题欢迎文章上方微博讨论,多思多想. 1.What makes the difference between Run time and CPU ...

  3. 114. Unique Paths [by Java]

    Description A robot is located at the top-left corner of a m x n grid. The robot can only move eithe ...

  4. Why HBase

    3.1.1,为什么选用HBases a)      容量巨大 HBase 的单表可以有百亿行.百万列,数据矩阵横向和纵向两个维度所支持的数据量级 都非常具有弹性.传统的关系型数据库,如 Oracle ...

  5. jQuery File Upload 文件上传插件使用二 (功能完善)

    使用Bootstrap美化进度条 Bootstrap现在几乎是人尽皆知了,根据它提供的进度条组件, 让进度条显得高大尚点 正因为其功能强大,js模块文件之间牵连较深 不好的地方耦合度非常高 重要的参数 ...

  6. JS基础,课堂作业,相亲问答

    相亲问答 <script> var a = prompt("你有房子么?"); var b = prompt("你有钱么?"); var c = p ...

  7. C#特性的简单介绍

    特性应该我们大多接触过,比喻经常使用的[Obsolete],[Serializable]等下面我就主要介绍一个特性的一些用法 摘自MSDN定义:用以将元数据或声明信息与代码(程序集.类型.方法.属性等 ...

  8. swift实现UItableview上拉下拉刷新模块

    最近用写个项目 发现上拉下拉刷新模块没找到合适的 so 自己写了一个 由于最近忙 教程就不写了 里面有 直接贴地址https://github.com/DaChengTechnology/DCRefr ...

  9. charles基本使用文档

    Charles 主要的功能包括: 截取 Http 和 Https 网络封包. 支持重发网络请求,方便后端调试. 支持修改网络请求参数. 支持网络请求的截获并动态修改. 支持模拟慢速网络. Charle ...

  10. php 操作 oracle lob 数据

    http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html Working with LOBs in Oracle and P ...