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

专业:商软(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. A1033

    找出最小开销. 思路: 出发点的加油站编号设为0,终点的加油站编号设为n,其他加油站编号按距离依次排序. 如果0号加油站的距离!=0,则无法出发,行驶距离为0. 从起点开始,寻找规则为,如果存在油价小 ...

  2. LIFO栈 ADT接口 链表实现

    LIFO 链栈结构 typedef int ElemType; struct node{ ElemType data; struct node* next; }; typedef struct nod ...

  3. 用gogs搭建git服务器

    Gogs 是一款极易搭建的自助 Git 服务. Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 G ...

  4. FIR滤波器实例

    Fs = 1000; % 采样频率 N = 1024; % 采样点数 ,即实际中一次FFT变换所使用的点数n = 0:N-1; % 采样序列,为plot绘图用的序列,其对应点表示的真实频率为 f = ...

  5. 20155210潘滢昊 2016-2017-2《Java程序设计》第一周学习总结

    20155210 2016-2017-2<Java程序设计>第一周学习总结 教材学习内容总结 1.1.1: 本节主要讲了Java的由来,1995年5月23日是Java公认的诞生日.还有版本 ...

  6. 【转载】值得推荐的C/C++框架和库

    原文:值得推荐的C/C++框架和库 值得学习的C语言开源项目 Libevent libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施.其以高效出名,它可以将IO事件,定时 ...

  7. Python运维三十六式:用Python写一个简单的监控系统

    市面上有很多开源的监控系统:Cacti.Nagios.Zabbix.感觉都不符合我的需求,为什么不自己做一个呢? 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 ...

  8. Maven学习(六)-----Maven仓库的详细介绍

    Maven仓库的详细介绍 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依 ...

  9. 用php实现简单的自制计算器

    存档: <!DOCTYPE html> <html> <head> <title>PHP实现计算器</title> </head> ...

  10. Mac下布置appium环境

    1.下载或者更新Homebrew:homebrew官网 macOS 不可或缺的套件管理器 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githu ...