0325 实验一操作系统模拟cmd
实验一、命令解释程序的编写
专业:商软(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的更多相关文章
- 实验一 操作系统模仿cmd
实验一.命令解释程序的编写 专业:商软(2)班 姓名:王俊杰 学号:201406114252 一. 实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3 ...
- 【iCore3 双核心板】例程十四:FATFS实验——文件操作
实验指导书及代码包下载: http://pan.baidu.com/s/1dEpechF iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【GMT43智能液晶模块】例程十三:FATFS实验——文件操作
实验原理: STM32F429上带有SDIO控制器,GMT43液晶模块上将SDIO连接到TF卡座.本实验 将Micro SD卡插入TF卡座上即可.通过FATFS创建test.txt文件,并且写入数据0 ...
- 【iCore4 双核心板_ARM】例程十四:FATFS实验——文件操作
实验现象: 核心代码: int main(void) { int i,j; FIL file; FATFS fatfs; static FRESULT res; unsigned ]; unsigne ...
- 实验一 命令解释程序cmd的编写
#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 30main(){ char str[ ...
- <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目
项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...
- 操作系统实验——PV操作实现生产者消费者模型
操作系统PV操作之--生产者消费者模型 个人博客主页 参考资料: Java实现PV操作 | 生产者与消费者 浙大公开课 在操作系统的多进程.多线程操作中经常会有因为同步.互斥等等问题引发出的一系列问题 ...
- Windows常用批处理命令 CMD BAT (CMD目录操作等dir)
Windows常用批处理 CMD BAT CMD获取文件夹下所有文件的名称并打印(输出)到指定目录 dir C:\Users\\Desktop\png\*.*/s >c:\.txt //cmd ...
- Oracle11g R2学习系列 之四Maven+Struts+Spring实验
今天试一下Java调用Oracle来看一下.会不会也如昨天实验的一样坑呢?由于我对于Java也接触的不多,所以不打算直接使用该收提供的实验文档,而是自己利用Maven+Struts+Spring来自己 ...
随机推荐
- STM32 HAL库学习系列第6篇---定时器TIM 级联配置
应用情景 使用定时器配置编码器模式,发现STM32只有两个定时器是32位,16位的测量值不够用,发现是可以使用两个16位定时器级联为32位的. 我是在使用编码器计数电机转速时使用,但是最终实现的效果不 ...
- css3动画性能优化--针对移动端卡顿问题
一.使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6.IE7.IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形: 缺 ...
- R语言学习笔记—决策树分类
一.简介 决策树分类算法(decision tree)通过树状结构对具有某特征属性的样本进行分类.其典型算法包括ID3算法.C4.5算法.C5.0算法.CART算法等.每一个决策树包括根节点(root ...
- 【Windows10】我的电脑从新装到优化配置
[Windows10]我的电脑从新装到优化配置 必装软件 Visual Studio Microsoft VS Code Microsoft Expression Design 4 Notepad2- ...
- WPF Color、String、Brush转换
原文:WPF Color.String.Brush转换 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/detai ...
- day5 RHCE
19 .配置 iSCSI 服务端 (***先做这个题目**,挂载重启,机器会挂掉) 配置server0提供一个iSCSI服务磁盘名为iqn.2014-11.com.example:server0,并 ...
- 图论-最短路径 2.Dijkstra算法O (N2)
2.Dijkstra算法O (N2) 用来计算从一个点到其他所有点的最短路径的算法,是一种单源最短路径算法.也就是说,只能计算起点只有一个的情况. Dijkstra的时间复杂度是O (N2),它不能处 ...
- SaltStack入门篇(七)之架构部署实战
模块:https://docs.saltstack.com/en/2016.11/ref/states/all/index.html 实战架构图: 实验环境设置: 主机名 IP地址 角色 linux- ...
- JS 判断checkbox 是否选中
<input type="checkbox" id="IsEnable" /> 在调试的时候,会出现,一直未true的状态,不管是选中还是未选中 解 ...
- 搜索引擎ElasticSearch系列(三): ElasticSearch2.4.4 bigdesk插件安装
一:ElasticSearch bigdesk插件简介 bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索引数据.搜索情况, ...