操作系统程序设计-操作系统模拟实现.doc

上传人:小小飞 文档编号:5022759 上传时间:2020-01-29 格式:DOC 页数:45 大小:278KB
返回 下载 相关 举报
操作系统程序设计-操作系统模拟实现.doc_第1页
第1页 / 共45页
操作系统程序设计-操作系统模拟实现.doc_第2页
第2页 / 共45页
操作系统程序设计-操作系统模拟实现.doc_第3页
第3页 / 共45页
操作系统程序设计-操作系统模拟实现.doc_第4页
第4页 / 共45页
操作系统程序设计-操作系统模拟实现.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《操作系统程序设计-操作系统模拟实现.doc》由会员分享,可在线阅读,更多相关《操作系统程序设计-操作系统模拟实现.doc(45页珍藏版)》请在三一文库上搜索。

1、操作系统程序设计操作系统程序设计 院 系: 计算机科学技术学院软件工程系 班 级: 软件 08 1 班 姓 名: 学 号: 指导教师: 2010 年 6 月 30 日 操作系操作系统统模模拟实现拟实现 操作系统程序设计任务书操作系统程序设计任务书 一、题目:一、题目:操作系统模拟实现 二、设计要求二、设计要求 (1)独立完成 (2)良好的交流、沟通能力 (3)充分运用前序课所学的软件工程、程序设计等相关知识 (4)充分运用调试和排错技术 (5)简单测试驱动模块和桩模块的编写 (6)查阅相关资料,自学具体课题中涉及到的新知识。 (7)按要求写出课程设计报告,并于设计结束后 1 周内提交。其主要内

2、容 包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求 分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序 清单(带中文注释) 、参考文献等。 三、三、设计内容及步骤设计内容及步骤 1.根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么。 具体要求至少实现进程管理模拟、存储器管理模拟、文件管理模拟,并将几个 模块较好地集成一个整体,给出一个较好的用户界面。 2.根据实现的功能,划分出合理的模块,明确模块间的关系。 3.编程实现所设计的模块。 4.程序调试与测试。 5.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输 入及其输出结果。

3、6.编写课程设计报告; 四、课程设计工作计划四、课程设计工作计划 2010 年 6 月 12 日前,指导教师讲课,学生根据题目准备资料,需求分析; 2010 年 6 月 13 日,提交软件总体模块结构图和分工方案; 2010 年 6 月 13 日2009 年 6 月 16 日,完成程序模块并通过独立编译; 2010 年 6 月 17 日2010 年 6 月 20 日,将各模块集成为一个完整的系统, 并录入足够的数据进行调试运行,数据必须存储到磁盘文件中,已备验收; 2010 年 6 月 22 日,验收、开始撰写课程设计报告; 2010 年 6 月 24 日前,提交课程设计报告,并将软件的源文件

4、及报告的 word 文档打印交到老师办公室里。 指导教师签章: 教研室主任签章 操作系统导教师评语与成绩 指导教师评语: 课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2010 年 7 月 日 I 目录目录 目录目录I 1 概述概述1 1.1 课程设计目的1 1.2 本次课程设计对今后的影响1 二二 需求分析需求分析2 2.1. 引言.2 2.1.1 功能需求2 21.2 编写背景.2 2.2 任务概述2 2.2.1 目标.2 2.2.2 系统的特点.3 3 总体设计总体设计4 3.1 整体功能图4 3.2 抽象数据类型定义4 4 详细设计详细设

5、计7 5 程序的调试与测试程序的调试与测试8 5.1 调试分析8 5.2 测试结果8 6 用户使用说明用户使用说明10 7 总结与体会总结与体会.11 程序清单程序清单12 参考文献参考文献40 1 1 概述概述 1.1 课程设计目的课程设计目的 操作系统原理课程设计是软件工程专业实践性环节之一,是学习完 操作系统原理课程后进行的一次较全面的综合练习。其目的在于加深对操 作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种 典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力, 并了解操作系统的发展动向和趋势。 1.2 本次课程设计对今后的影响本次课程设计对今后

6、的影响 通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力, 能更好的巩固 操作系统原理 课程学习的内容,掌握 工程软件设计的基本方法, 强化上机动手编程能力,闯过理论与实践相结合的难关!更加理解了各种操作系统如 windows系统、Linux系统等的原理 !为后续各门计算机课程的学习和毕业设计打下 坚实基础 。能方便使用和编写出更好的其他软件。 同时增加了同学之间的 互帮互助 精 神!共同学习共同进步! 2 二二 需求分析需求分析 2.1. 引言引言 2.1.1 功能需求功能需求 通过一学期的学习慢慢发现操作系统原理课程设计是总结一学期成果 的最好方式,是学习完操作系统原理

7、课程后进行的一次较全面的综合练习。 其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结 构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养 学生的系统设计能力,并了解操作系统的发展动向和趋势。是一个不可缺少的 环节。 21.2 编写背景编写背景 经过一个学期的操作系统原理课程的学习,我们学到了很多理论上 的知识,对操作系统及其各方面的功能有了深刻的认识,但这是远远不够 的,我们要讲理论编程实践,虽然我们学习期间做过很多的实验,但是都 是针对操作系统的某一块具体的功能的,我们对了解了每块具体的功能的 实现,但是,整体说来还是模糊,所以,很有必要将各个模块整合起

8、来, 也就是模拟一个操作系统,这样,不仅跟深入学习了各个模块,更认识了 一个完整的 OS,对我们来说受益匪。 2.2 任务概述任务概述 2.2.1 目标目标 至少实现进程管理模拟、存储器管理模拟、文件管理模拟,并将几个模块 较好地集成一个整体,给出一个较好的用户界面。 进程管理模拟:在多道程序运行环境下,进程数目一般多于处理机数目,是 的进程要通过竞争来使用处理机。这就要求系统能按某种属案发,动态的把处 3 理机分配给就绪队列中的一个进程,使之运行。进程调度的功能就是从就绪队 列中挑选一个进程到处理机上运行。 存储器管理模拟:主存是中央处理器直接存取指令和数据的存储器,能否 合理的利用主存,在

9、很大程度上将影响到整个计算机系统的性能。在多道作业 和多进程环境下,共享主存空间。当作业执行完毕或进程运行结束后将主存空 间归还系统。 文件管理模拟:用于用户界面和操作命令在操作系统中的作用,实现操作 系统中对文件的管理。 2.2.2 系统的特点系统的特点 本次可设主要是简单的模拟一个操作系统,包括一个主界面,实现了银行 家算法、模拟文件管理、主存空间的分配与回收、进程调度等功能。模拟了操 作系统的进程管理、文件管理、存储器管理。银行家算法,包括了新加作业、 申请资源、撤销作业、查看资源情况四个模块。如果申请资源后系统进入不安 全状态,则申请失败。进程调度实现了调度进程的三个主要算法优先数、

10、先来先服务、时间片轮转法。其中,优先数算法中优先数的确定为(50-进程的 服务时间) ,每轮一次优先数-3。时间片轮转法的时间片由用户自己输入。存储 器管理实现了申请空间、撤销作业、显示空闲表等功能。如果空闲空间不足则 申请失败。模拟文件管理很全面,包含了创建目录、删除目录、改变目录、创 建文件、删除文件、显示目录的功能。另外,我还加了回到根目录的功能 4 3 总体设计总体设计 3.1 整体功能图整体功能图 银行家算法 进程调度 存储器管理 退出 主界面主界面 新加作业 申请资源 撤销作业 查看资源 优先数 时间片轮转 先来先服务 申请空间 撤销作业 显示空闲表 改变目录 创建目录 创建文件

11、删除文件 删除目录 显示目录 模拟文件管理 帮助 3.2 抽象数据类型定义抽象数据类型定义 银行家算法: const int MAX_P=20; / 进程的最大容量 const int MAXA=10; / A 类资源的最大数量 const int MAXB=5; /B 类资源的最大数量 const int MAXC=7; /C 类资源的最大数量 typedef struct anode 5 int a,b,c,/*三种资源总数*/remain_a,remain_b,remain_c/*三种资源剩余数*/; bank; typedef struct node1 char name20; int

12、 a,b,c,need_a,need_b,need_c; process; / 进程的结构体结点 模拟文件管: typedef struct bnode char name50; int type;/*0 代表目录,1 代表普通文件*/ struct bnode *next,/* 兄弟节点*/*sub,/*第一个子节点*/*father/*父节点*/; int size; /*文件的大小*/ dirnode; dirnode *workdir;/当前工作目录 dirnode root;/根目录 char path100;/定义路径信息 const int MAXJOB = 100;/定义最大记

13、录数 存储器管理: 首先需要建立空闲区数据文件,空闲区数据文件包括若干行,每行有两个 字段:起始地址,内存块大小(均为整数) ,各自段一逗号隔开。空闲区数据文 件: 0,10 10,08 18,10 28,06 34,10 44,09 空闲表的结构: typedef struct cnode int start; int length; char tag20; job; job freesMAXJOB;/定义空闲区表 int free_quantity; job occupysMAXJOB; int occupy_quantity; 6 进程调度: 进程存在的标识是进程控制块(PCB) ,进程

14、控制块结构如下: typedef struct dnode char name10; int prio; int round; int cputime; int needtime; int count; char state; struct dnode *next; PCB; / 进程的 PCB PCB *finish,*ready,*run,*r; 7 4 详细设计详细设计 基本操作: 银行家算法:银行家算法主要由 5 个函数实现了四大功能,即新加作业、为作 业申请资源、撤销作业、查看资源情况。 void yinitial() /初始化函数 void add() / 新加作业函数 void

15、bid() /为作业申请资源 void yfinished()/撤销作业 void yview()/查看资源情况 模拟文件管理:模拟文件管理实现了很多功能,当然也有很多函数,每一个文件 和目录都是用一个节点来描述的,用 type 来控制,有两个值,0 和 1,0 代表目 录,1 代表普通文件 void minitial() /初始化目录函数 dirnode * init() /初始化新节点的函数 void CD(char dirname) /改变目录 void CREATE(char filename,int filesize) /创建文件 void DEL(char filename)/删除

16、文件 void dir(dirnode *p) /现实所有目录,本目录下所有兄弟目录和文件 void dirs(dirnode *p,char str)/显示由目录下子目录中的文件和目录 void LSALL()/显示所有目录 void MD(char dirname)/创建目录 void RD(char dirname)/删除目录 进程调度: void firstin()/调度进程使之运行 void prt1(char a)/* void prt2(char a ,PCB *q) void prt(char algo)*/ 上面的三本分主要是显示出来进程的调度情况 void insert1(

17、PCB *q)/插入新的进程 void creat1(char alg)/* void creat2(char alg)*/以上两个实现进程的创建 void priority(char alg)/优先数算法的实现 void roundrun(char alg)/时间片轮转法的实现 void FCFSrun(char alg)/先来先服务算法的实现 void xianshi()/显示主界面的函数 void yinhangjia()/主函数掉该函数实现银行家算法 void wenjianguanli()/主函数调度该函数实现文件管理 void zhucunkongjian()/主函数调度该函数实现

18、存储器管理 8 void jinchengdiaodu()/主函数调度该函数实现进程调度 5 程序的调试与测试程序的调试与测试 5.1 调试分析调试分析 (1)在试验过程中遇到了很多错误,最开始的时候,在将各个模块连接起来的 时候几个函数的名字一样,出现了错误,如图: 图 1-1 后来将函数的名字都改变了一下。 (2)在主函数中将各个模块的主函数连起来的时候,退出来的时候整个程序就 结束了,而我是想推出来的时候是退回到主界面,后来又给改了一下,加了一 个 while 循环,还有变量 flag,有 flag 来控制,当 flag=0 的时候就跳出 while 循 环,然后清屏,掉一个编好的显示函

19、数,显示主界面,这样就退回了主界面, 后来又发现主函数有很多东西,很乱,我又将每个模块的主函数部分又分出去 一个函数,这样主函数掉每个模块的原来的主函数部分就好了。 5.2 测试结果测试结果 主界面: 图 1 银行家算法: 9 图 2 模拟文件管理: 图 3 主存空间分配与回收: 图 4 进程调度: 图 5 帮助: 10 图 6 6 用户使用说明用户使用说明 本次的实验主要是模拟一个操作系统,当运行的时候会出现一个主界面,上面 列出了该系统主要实现的功能,可以根据提示选择 1.、应行家算法 2、模拟文 件管理 3、贮存空间的分配与回收 4、进程调度 5、退出系统。选择完后就进入 该模块,如果选

20、择的是 1 即银行家算法,进去后界面也会有提示,1、新加作业, 2,、为作业申请资源 3、撤销作业 4、查看资源情况、0 退出系统,选择你想要 操作的。会提示你相应的操作。如果选择的是 2 即模拟文件管理,进入后也有 界面给予提示,但是这个模块有先后顺序,即应该先创建目录,之后在进行其 他操作,我还加入了一个额外的功能,如果输入 cd 就会回到上一级目录里。 如果选择的是 3,即存储器管理,这个模块首先要在改程序在同一目录下建立 一个空闲表,进入该模块后首先要输入改空闲表,例如,input.txt,如果该空闲 表存在的话就会继续往下进行,根据提示做想要实现的操作。如果选择的是 4,即进程调度,

21、进入后可以选择 P、优先数算法,R、时间片轮转法 F、先来 先服务算法、E 退出时间片轮转法的时间片由用户来定。这些模块中的退出都 是退到主界面的,要想退出本系统,在主界面里有一个退出。 11 7 总结与体会总结与体会 这次课程设计对我来说获益很大、体会很深,通过这次课程设计将所学的 操作系统课程的知识用于实践,对所学的知识有了系统的了解、更深刻。在将 各个模块连起来过正中首先要对各个模块都深入了解,不仅复习了所学的,以 前不明白的现在明白了好多,而且对“操作系统”不再陌生,但是“操作系统 “所要做的绝不是这么少的,所学的这些是远远不够的,希望还能有更深的了 解。 这次课程设计给我了很大的启示

22、:无论学什么都要一步一个脚印,不能前 面开始学很有劲头,后面就松懈了,要持之以恒。感谢老师耐心的教导,您认 真的态度让很多人“畏惧” ,但对我来说是提升自身,我想我的“操作系统”之 路还没走完,会有更深入的学习。再次感谢老师! 12 程序清单程序清单 #include #include #include #include using namespace std; typedef struct node char name10; int prio; int round; int cputime; int needtime; int count; char state; struct node *

23、next; PCB; PCB *finish,*ready,*run,*r; int N;/以上是进程调度结构体 const int MAX_P=20; const int MAXA=10; const int MAXB=5; const int MAXC=7; typedef struct nodee int a,b,c,/*三种资源总数*/remain_a,remain_b,remain_c/*三种资源剩余数*/; bank; typedef struct node1 13 char name20; int a,b,c,need_a,need_b,need_c; process; bank

24、 banker; process processesMAX_P; int quantity;/作业的数量 /以上是银行家算法结构体 const int MAXJOB = 100;/定义最大记录数 typedef struct nodez int start; int length; char tag20; job; job freesMAXJOB;/定义空闲区表 int free_quantity; job occupysMAXJOB; int occupy_quantity;/以上是主存空间分配回收结构体 typedef struct nodem char name50; int type;

25、/*0 代表目录,1 代表普通文件*/ struct nodem *next,/* 兄弟节点*/*sub,/*第一个子节点*/*father/*父节点*/; int size; /*文件的大小*/ dirnode; dirnode *workdir;/当前工作目录 dirnode root;/根目录 char path100;/定义路径信息 /以上是模拟文件管理 void firstin() run = ready; run-state = R; ready = ready-next; void prt1(char a) if(a=P|a = p) printf(“进程号 cpu 时间 所需时

26、间 优先数 状态n“); else if(a =r|a =R) printf(“进程号 cpu 时间 所需时间 记数 时间片 状态n“); else if(a=f|a=F) printf(“进程号 所需时间 状态n“); void prt2(char a ,PCB *q) 14 if(a=P|a = p) printf(“%-10s%-10d%-10d%-10d%cn“,q-name,q-cputime,q-needtime,q-prio,q- state); else if(a = r| a = R) printf(“%-10s%-10d%-10d%-10d%-10d%cn“,q-name,

27、q-cputime,q-needtime,q- count,q-round,q-state); else if(a=f|a=F) printf(“%-10s%-10d%cn“,q-name,q-needtime,q-state); void prt(char algo) PCB *p; prt1(algo); if(run != NULL p = ready; while(p != NULL) prt2(algo,p); p = p-next; p = finish; while(p != NULL) prt2(algo,p); p = p-next; getchar(); void inse

28、rt1(PCB *q) PCB *p1,*s,*r; int b; s = q; p1 = ready; r = p1; b = 1; while(p1 != NULL) p1 = p1-next; 15 else b = 0; if(r != p1) r-next = s; s-next = p1; else s-next = p1; ready = s; void creat1(char alg) PCB *p; int i,time; char na10; ready = NULL; finish = NULL; run = NULL; printf(“输入进程号和运行时间:n“); f

29、or(i = 1; i name,na); p-cputime = 0; p-needtime = time; p-state = W; p-prio = 50-time; if(ready != NULL) insert1(p); else p-next = ready; ready = p; /clrscr(); if(alg =p|alg =P) printf(“ 优先数算法输出信息:n“); else printf(“ 先来先服务算法输出信息:n“); 16 printf(“*n“); prt(alg); run = ready; ready = ready-next; run-sta

30、te = R; void creat2(char alg) PCB *p; int i,time,round; char na10; ready = NULL; finish = NULL; run = NULL; printf(“请输入时间片:“); scanf(“%d“, printf(“输入进程号和运行时间:n“); for(i = 1; i name,na); p-cputime = 0; p-needtime = time; p-state = W; p-count = 0; p-round = round; p-next = NULL; if(i = 1)/*按顺序插入到 read

31、y 链表中*/ r = ready = p; else r-next = p; r = p; /clrscr(); printf(“ 时间片轮转算法输出信息:n“); printf(“*n“); prt(alg); void priority(char alg) while(run != NULL) 17 run-cputime += 1; run-needtime -= 1; run-prio -= 3; if(run-needtime = 0) run-next = finish; finish = run; run-state = F; run = NULL; if(ready != N

32、ULL) firstin(); else if(ready != NULL) insert1(run); firstin(); prt(alg); void roundrun(char alg) bool flag;/当 ready 列里只有一个时做标记 while(N) flag = 1;/初始化为 1 run = ready;/run 每次运行 ready 的队头 run-count+;/没运行一次计数器加 1 if(run-needtime round)/当剩余时间小于时间片轮转时间时的情况 run-cputime += run-needtime; run-needtime = 0; e

33、lse run-cputime += run-round; run-needtime -= run-round; run-state = W;/变为等待 if(ready-next != NULL) ready = ready-next; else flag = 0;/当 ready 剩一个时做标记 if(run-needtime = 0)/当 run 结束时放入 finish 队列里 run-next = finish; 18 finish = run; run-state = F; N-;/进程数少 1 else if(flag)/执行完如果不是剩一个的话,就把 run 放到队尾 r-ne

34、xt = run; r = run; r-next = NULL; if(N)ready-state = R;/结束时不应该有R“ else ready = NULL;/结束时应该为空 prt(alg);/输出 void FCFSrun(char alg) PCB *p; while(run!=NULL) run-cputime += run-needtime; run-needtime =0; run-next = finish; finish = run; run-state = F; run = NULL; if(ready!=NULL) firstin(); prt(alg); voi

35、d Process() system(“cls“); printf(“ *欢迎进入进程调度算法页面*n“); printf(“ 1.优先数算法 2.时间片轮转算法n“); printf(“ 3.先来先服务算法 0.安全退出 n“); printf(“ *n“); printf(“ 请在 03 之间选择 :“); void ProcessControl() int x,flag = 1; 19 char alg; while(flag) Process(); scanf(“%d“, if(x !=0) printf(“输入进程数:“); scanf(“%d“, switch(x) case 1:

36、alg = p;creat1(alg);priority(alg);break; case 2:alg = r;creat2(alg);roundrun(alg);break; case 3:alg = f;creat1(alg);FCFSrun(alg);break; case 0:flag = 0;break; default:printf(“输入有误,请在 03 之间选择:n“);break; /初始化函数 void Initial() int i; banker.a=MAXA; banker.b=MAXB; banker.c=MAXC; banker.remain_a=MAXA; ba

37、nker.remain_b=MAXB; banker.remain_c=MAXC; for(i=0;iname; for(i=0;ineed_a; coutneed_b; coutneed_c; t=1; / coutbanker.remain_a ) coutbanker.remain_b ) coutbanker.remain_c ) coutname;/输入 p=-1; for(i=0;ia; coutb; coutc; flag=1; if(abanker.remain_a)|(aprocessesp.need_a-processesp.a) coutbanker.remain_b)|

38、(bprocessesp.need_b-processesp.b) coutbanker.remain_c)|(cprocessesp.need_c-processesp.c) coutname; p=-1; for(i=0;i0) for(i=0;i fname; if(fp = fopen(fname,“r“)=NULL) cout job_name; cin job_length; flag = 0; for(i = 0; i = job_length) flag = 1; if(!flag) cout= job_length) t = 1; i+; i-; occupysoccupy_

39、quantity.start = freesi.start; strcpy(occupysoccupy_quantity.tag,job_name); occupysoccupy_quantity.length = job_length; occupy_quantity+; if(freesi.length job_length) freesi.start += job_length; freesi.length -= job_length; else for(j = i; j job_name; flag = -1; for(i = 0; i sub; if(p=NULL) couttype

40、=0) if(!strcmp(p-name ,dirname) flag=1; break; p=p-next; if(flag=1) workdir=p; strcat(path,“); strcat(path,p-name); coutname,“root“) workdir = workdir-father; for(int i = strlen(path)-1; i = 0; i-) if(pathi =) pathi = 0;break; coutname ,filename); q-sub=NULL; q-type=1; q-next=NULL; q-father=workdir;

41、 q-size=filesize; p=workdir-sub; if(p=NULL) workdir-sub=q; couttype=1) if(!strcmp(p-name,filename) flag=1; coutnext; if(flag=0) p=workdir-sub; while(p-next) p=p-next; p-next=q; coutsub; if(p=NULL) couttype=1) if(!strcmp(p-name,filename) flag=1; break; p=p-next; if(flag=1) if(p=workdir-sub) workdir-s

42、ub=p-next; else q=workdir-sub; 33 while(q-next!=p) q=q-next; q-next=p-next; delete p; couttype=0) coutname“name“sizenext; /显示由目录下子目录中的文件和目录 void dirs(dirnode *p,char str) char newstr100; dirnode *q; coutsub) strcpy(newstr,“); strcat(newstr,str); strcat(newstr,“); 34 strcat(newstr,q-name); dirs(q-sub

43、,newstr); q=p; while(q-next) if(q-next-sub) strcpy(newstr,“); strcat(newstr,str); strcat(newstr,“); strcat(newstr,q-next-name); dirs(q-next-sub,newstr); q=q-next; /显示所有目录 void LSALL() dirnode *p; coutname,dirname); q-sub=NULL; q-type=0; q-next=NULL; q-father=workdir; q-size=0; p=workdir-sub; if(p=NU

44、LL) 35 workdir-sub=q; couttype=0) if(!strcmp(p-name,dirname) flag=1; coutnext; if(flag=0) p=workdir-sub; while(p-next) p=p-next; p-next=q; coutsub; if(p=NULL) couttype=0) if(!strcmp(p-name,dirname) flag=1; break; p=p-next; if(flag=1) if(p=workdir-sub) workdir-sub=p-next; else q=workdir-sub; while(q-

45、next!=p) q=q-next; q-next=p-next; delete p; cout#“,path); gets(string); len=strlen(string); if(len=0) strcpy(command,“errer“); else /获得命令 s=NULL; s=strchr(string, ); if(s!=NULL) *s=0; strcpy(command,string); /测试命令类型 if(!strcmp(command,“CD“)|(!strcmp(command,“cd“) comm=1; else if(!strcmp(command,“CRE

46、ATE“)|(!strcmp(command,“create“) comm=2; else if(!strcmp(command,“DEL“)|(!strcmp(command,“del“) comm=3; else if(!strcmp(command,“DIR“)|(!strcmp(command,“dir“) comm=4; else if(!strcmp(command,“MD“)|(!strcmp(command,“md“) comm=5; else if(!strcmp(command,“RD“)|(!strcmp(command,“rd“) comm=6; else 38 if(!strcmp(command,“EXIT“)|(!strcmp(command,“exit“

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1