合肥工业大学操作系统课程设计呈报

合集下载

操作系统课程设计报告

操作系统课程设计报告

装订线内请勿答题0学专班学生姓0 - 1 -文 华 学 院2017 ~2018 学年度第 2 学期《操作系统课程设计》考查试卷(A 卷) 课程性质:(必修 ) 使用范围:(本科) 考查时间:2018年3月2 日 考查方式:( 开卷)试 题: 要 求: 独立完成,3000-8000字(不含附件)。

目录一、课程设计任务及要求 (3)1.1设计任务 (3)1.2设计要求 (3)二、算法及数据结构 (3)2.1主要数据结构 (3)2.2用户管理模块 (5)2.2.1初始化用户函数 (5)2.2.2系统用户的输出函数 (6)2.2.3用户的查找函数 (6)2.3创建文件函数 (6)2.4删除文件函数 (8)2.5打开文件函数 (9)3.6读文件函数 (11)3.7写文件函数 (11)3.8关闭文件函数 (12)3.9显示文件函数 (13)3.9.1显示用户文件 (13)3.9.2显示已打开的文件 (13)三、程序设计与实现 (18)4.1 程序流程图 (18)4.2 程序说明 (18)4.3 实验结果 (19)四、参考文献 (21)六、收获、体会和建议 (22)七、附录源程序清单 (23)装订线内请勿答题0学专班学生姓0 - 3 -一、课程设计任务及要求 1.1 设计任务 设计、实现一个模拟的文件系统 1.2 设计要求 建立文件存储介质的管理机制 建立目录(采用一级目录结构) 文件系统功能(显示目录、创建、删除、打开、关闭、读、写) 文件操作接口(显示目录、创建、删除、打开、关闭、读、写) 独立完成课程设计内容 文本的课程设计报告,内容包括调试记录和程序清单(附注释)。

二、算法及数据结构 2.1主要数据结构 /* *定义文件数据结构 */ typedef struct file { char file_name[20] ; bool file_protect[3] ; bool open_file_protect[3] ; //仅在文件打开时有效 int read , write ; //定义为读写指针 int file_length ; struct file *next ; } File ;/* *用户与文件的映射 */typedef struct x_map {char userName[20] ;File *file ;struct x_map *next ;} Map ;/* *定义主文件目录 */typedef struct mfd{Map *head , *tail ;} MFD ;/* *打开文件目录 */typedef struct afd{File *head , *tail ;int max_open ;int current_open ;} AFD ;主文件目录(MFD)和用户文件目录(UFD)装订线内请勿答题0学专班学生姓- 5 -打开文件目录(AFD )2.2用户管理模块 2.2.1初始化用户函数 void initUser(MFD *mfd) { //初始化两个不同用户 for (int i = 1 ; i <= 2 ; i++) { Map *m ; m = (Map*)malloc (sizeof (Map)) ; if (m == NULL) { exit (0) ; } cout <<"Please input init user name : " ; cin >>m->userName ; m->file = NULL ; m->next = NULL ; if (mfd->head == NULL) { mfd->head = mfd->tail = m ; }else{mfd->tail->next = m ;mfd->tail = m ;}}}初始化两个不同用户,把输入用户的用户名下的目录指针、文件指针初始化2.2.2系统用户的输出函数void displayUser(MFD *mfd){Map *m = NULL ;m = mfd->head;cout<<"user : " ;while(m){cout<<m->userName<<" " ;m = m->next ;}cout<<endl ;}通过用户与文件关联映射的指针来输出已存在的用户数据2.2.3用户的查找函数Map * queryUser(char userName[] , MFD *mfd){Map *m = NULL ;m = mfd->head ;while(m){if(strcmp(userName , m->userName) == 0)装订线内请勿答题0学专班学生姓- 7 - { return m ; } m = m->next ; } return NULL ; } 进行用户的查找,找到则返回用户映射指针 2.3创建文件函数 bool createFile(Map *user , char file_name[] , bool file_protect[3] , int file_length) { File *file ; file = (File*)malloc (sizeof (File)) ; if (file == NULL) { return false ; } //进行文件的初始化 strcpy (file->file_name , file_name) ; file->file_protect[0] = file_protect[0] ; file->file_protect[1] = file_protect[1] ; file->file_protect[2] = file_protect[2] ; file->file_length = file_length ; file->read = file->write = 0 ; file->next = NULL ;if (user->file == NULL){user->file = file ;}else{File *op , *preOp = NULL ;op = user->file ;//查找是否存在同名文件while(op){if(strcmp(op->file_name , file->file_name) == 0){cout<<"The file name "<<file->file_name<<" is alreadyexit ! "<<endl ;return false ;}preOp = op ;op = op->next ;}preOp->next = file ;}}输入文件名,文件权限及文件长度,将文件的名称、读写权限、长度等进行初始化,然后查找是否存在同名文件,存在同名文件时则输出该文件已存在并报错2.4删除文件函数bool deleteFile(Map *user , char file_name[] , AFD *afd){File *file = NULL , *prefile = NULL , *temp ; file = afd->head ;//在打开文件中查找装订线内请勿答题学专班学生姓 0 - 9 -while (file) { if (strcmp (file_name , file->file_name) == 0) { cout <<"\""<<file_name<<"\" is open , please close it before ! \n" ;return false ; } file = file->next ; } file = user->file ; //在文件中进行查找 while (file) { if (strcmp (file_name , file->file_name) == 0) { if (file == user->file) { temp = file ; user->file = file->next ; } else { temp = file ; prefile->next = file->next ; } delete temp ; return true ; }prefile = file ;file = file->next ;}if(prefile->next == NULL){cout<<"user "<<user->userName<<" has not the file \""<<file_name<<"\""<<endl;}return false ;}输入要删除的文件名,先看该文件是否打开,在打开文件链表中查找,若是打开文件则输出提示该文件已打开请先关闭文件,若不是则在用户文件中查找,找到则进行删除操作,没有则输出提示该用户没有此文件并报错2.5打开文件函数bool openFile(Map *user , char file_name[] , AFD *afd , bool open_file_protect[]){File *file = NULL ;file = user->file ;while(file){if(strcmp(file->file_name , file_name) == 0){break ;}file = file->next ;}if(file)装订线内请勿答题0学 专 班 学生姓 0- 11 -{File *xfile ;xfile = (File*)malloc (sizeof (File)) ; if (xfile == NULL) {return false ; }*xfile = *file ;//根据文件的权限进行打开权限的赋值if (xfile->file_protect[0] >= open_file_protect[0]) {xfile->open_file_protect[0] = open_file_protect[0] ;} else {cout <<"no read priority ! "<<endl; return false ;}if (xfile->file_protect[1] >= open_file_protect[1]) {xfile->open_file_protect[1] = open_file_protect[1] ; } else {cout <<"no write priority ! "<<endl; return false ; }if (xfile->file_protect[2] >= open_file_protect[2]) {xfile->open_file_protect[2] = open_file_protect[2] ;}else{cout<<"no excute priority ! "<<endl;return false ;}xfile->next = NULL ;if(afd->head == NULL){afd->head = afd->tail = xfile ;afd->current_open += 1 ;}else if(afd->current_open < afd->max_open){afd->tail->next = xfile ;afd->tail = xfile ;afd->current_open += 1 ;}else{cout<<"The open file is too many ! " <<endl ; return false ;}}else{cout<<"the "<<file_name<<" is not exit !"<<endl ; return false ;装订线内请勿答题0学 专 班 学生姓 0- 13 -} }输入要打开的文件名及文件权限,根据文件名在文件链表中查找,若没有找到则输出提示该文件不存在,若找到则根据输入的文件权限判断该文件是否有读、写、执行的权限,若没有则输出相关提示并报错,若有相关权限则输出该文件的读写信息。

操作系统课程设计报告

操作系统课程设计报告

北华航天工业学院《操作系统》课程设计报告课设报告题目:进程调度算法、银行家算法、虚拟内存中的页面置换磁盘调度算法作者所在系部:计算机科学与工程系作者所在专业:计算机科学与技术作者所在班级:B09512作者姓名:丁小玲指导教师姓名:赵辉完成时间:2011.12.14北华航天工业学院教务处制随着科学技术的发展,计算机在人们的生活领域中占据了重要的地位。

计算机中最最关键的就是操作系统,它直接对计算机的硬件就行了管理,为人们提供了人机界面,使人们可以更方便高效的利用电脑。

我们应该掌握操作系统中进程调度,内存管理,设备管理以及文件管理中重要的过程,这样有利于我们以后更好的了解操作系统。

进程调度算法主要有三种算法,分别是先来先服务、短进程优先算法和高响应比优先算法;银行家算法主要是针对资源分配后,系统是否安全的判断;虚拟内存中的页面置换主要有三种算法,分别是先进先出算法、最近最久未使用算法和最佳置换算法;磁盘调度算法主要有三种算法,分别是先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法。

关键词:先进先出安全算法循环扫描最短寻道第一章绪论 (1)1.1 课程设计的背景和意义 (1)1.1.1 课程设计的理论研究基础 (1)1.1.2 课程设计的意义 (1)1.2 课程设计环境 (2)第二章需求分析 (3)2.1 功能要求 (3)2.1.1 进程调度算法 (3)2.1.2银行家算法 (3)2.1.3 虚拟内存中的页面置换 (3)2.1.4 磁盘调度算法 (3)2.2 问题的解决方案 (4)2.2.1 进程调度算法 (4)2.2.2银行家算法 (4)2.2.3 虚拟内存中的页面置换 (4)2.2.4 磁盘调度算法 (5)第三章系统设计 (6)3.1 数据设计 (6)3.1.1 结构体设计 (6)3.1.2 函数设计 (6)第四章系统实现 (9)4.1 结构体实现 (9)4.1.1 进程调度算法 (9)4.2 函数实现 (9)4.2.1进程调度算法 (9)4.2.2银行家算法 (12)4.2.3虚拟内存中的页面置换算法 (13)4.2.4磁盘调度算法 (17)4.3 主函数实现 (19)4.3.1 进程调度算法的运行界面 (19)4.3.2 银行家算法的运行界面 (19)4.3.3 虚拟内存中的页面置换的运行界面 (20)4.3.4磁盘调度算法的运行界面 (21)4.4 系统界面 (21)4.4.1 进程调度算法的运行界面 (21)4.4.2 银行家算法的运行界面 (22)4.4.3 虚拟内存中的页面置换算法的运行界面 (22)4.4.4 磁盘调度算法的运行界面 (22)第五章系统测试 (23)5.1 模块测试 (23)5.1.1 进程调度算法的模块测试 (23)5.1.2 银行家算法的模块测试 (23)5.1.3虚拟内存中的页面置换算法的模块测试 (24)5.1.4 磁盘调度算法的模块测试 (25)5.2 课程设计过程中遇到的问题 (26)总结 (27)致谢 (28)参考文献 (29)附录 (30)第一章绪论随着科学技术的发展,计算机在人们的生活领域中占据了重要的地位。

操作系统实验报告--安徽工业大学

操作系统实验报告--安徽工业大学

实验一汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。

若相同则显示‘Match’,否则显示‘Nomatch’。

在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。

再代码段比较字符串string1和string2,通过比较判断是否相同。

若相同则显示‘Match’,否则显示‘Nomatch’。

二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。

再用Debug进行调试。

其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,用-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存器和修改寄存器的值,-q命令用来退出debug程序。

在这些命令的后面加上地址,可以将命令执行到相应的地方。

如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:三:源程序和执行结果:DATA SEGMENTSTRING1 DB 'Move the cursor backward.' STRING2 DB 'Move the cursor backward.' mess1 db 'match.',10,13,'$'mess2 db 'no match.',10,13,'$'DATA ENDScode segmentmain proc farassume cs:code,ds:DATA,es:DATAstart:mov ax,DATAmov ds,axmov es,axlea si,STRING1lea di,STRING2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,9int 21hmov ah,4chint 21hretmain endpcode endsend start执行结果:实验二用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一:程序说明:1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX的内容进行交换。

合肥工业大学操作系统实验报告

合肥工业大学操作系统实验报告

操作系统实验报告班级:计算机科学与技术姓名:学号:实验3 进程的创建一、实验目的练习使用EOS API 函数CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和程序的区别。

调试跟踪CreateProcess 函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。

二、实验过程记录1./*Hello.c*/#include "EOSApp.h"int main(int argc, char* argv[]){int i;for (i = 1; i <= 5; i++) {printf("Hello,world! %d\n", i);Sleep(1000);}printf("Bye-bye!\n");return 0;}作用:测试软盘镜像中的程序。

输出"Hello,world! I”并循环输出五次,每次挂起1000ms,最后输出” Bye-b ye!”。

结果:2./*NewProc.c*/#include "EOSApp.h"int main(int argc, char* argv[]){STARTUPINFO StartupInfo;PROCESS_INFORMATION ProcInfo;ULONG ulExitCode; // 子进程退出码INT nResult = 0; // main 函数返回值。

0 表示成功,非0 表示失败。

#ifdef _DEBUG__asm("int $3\n nop");#endifprintf("Create a process and wait for the process exit...\n\n");//// 使子进程和父进程使用相同的标准句柄。

//StartupInfo.StdInput = GetStdHandle(STD_INPUT_HANDLE);StartupInfo.StdOutput = GetStdHandle(STD_OUTPUT_HANDLE);StartupInfo.StdError = GetStdHandle(STD_ERROR_HANDLE);//// 创建子进程。

合肥工业大学操作系统课程设计报告

合肥工业大学操作系统课程设计报告

一.设计题目第9题:进程死锁的检测:绘制资源分配图要求:1)建立资源分配图的数据结构描述;2)建立绘制资源分配图的历程,包括结点和有向边;3)可以删除、添加节点或有向边。

4)可以鼠标在串口的任意位置指点,确定结点或者有向边的位置;5)可以拖动现有结点的位置,使之相关的结点移动6)可以存入文件和从文件中读取。

二.设计原理及算法描述UNIX命令:ls [选项]列出文件信息(默认为当前目录)ls无参显示一个目录中的文件和子目录ls -l每行仅显示一个目录或名称ls --help 显示此帮助信息并离开mkdir目录若目录不存在则创建目录mkdir --help显示此帮助信息并离开rmdir目录若目录没有数据则删除目录rmdir --help显示此帮助信息并离开cp来源文件目的文件将来源文件复制到目的文件cp --help显示此帮助信息并离开cat文件或:cat 文件1 >> 文件2显示文件内容或连接两个文件,并将结果输出到显示屏上cat文件将文件的内容输出到显示屏上cat 文件1 >> 文件2将文件1连接到文件2的结尾,并输出到显示屏上cat --help 显示此帮助信息并离开more文件使文件能逐行(回车键)或逐页(空格键)显示并显示当前文件所占总文件的百分比more --help显示此帮助信息并离开mv文件1 文件2或:mv 文件目录重命名或移动文件mv 文件1 文件2将文件1名字改为文件2的名字mv 文件目录将指定文件移动到指定目录下mv --help显示此帮助信息并离开sort文件将文本文件内容加以排序sort --help显示此帮助信息并离开按照每个命令的功能编写一个实现函数。

通过c++字符串操作从输入流获得指令以及参数,通过对指令以及参数的判别调用对应指令的函数,实现对windows内文件的各项操作。

三.开发环境硬件环境:个人PC机软件环境:Microsoft Windows XPMicrosoft Visual C++ 6.0四.重要算法和设计思路描述命令以及参数的获取:由于命令加参数最多能有四部分,所以申请4个字符串数组。

合工大操作系统课程设计

合工大操作系统课程设计

合工大操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念,掌握操作系统的发展历程、功能及分类。

2. 学会分析操作系统的核心组成部分,如进程管理、内存管理、文件系统、设备管理。

3. 掌握操作系统的基本原理,如进程调度、内存分配、文件权限控制等。

技能目标:1. 能够运用进程管理的基本方法,编写简单的进程同步与互斥程序。

2. 学会使用操作系统提供的API进行文件操作和设备控制。

3. 能够分析并优化操作系统的性能,提高系统资源利用率。

情感态度价值观目标:1. 培养学生对操作系统的学习兴趣,激发他们探索计算机科学领域的热情。

2. 培养学生的团队协作精神,提高他们在项目实践中的沟通与协作能力。

3. 培养学生具备良好的计算机伦理道德观念,尊重知识产权,遵循法律法规。

本课程针对合肥工业大学高年级本科生,课程性质为专业核心课。

结合学生特点,课程目标注重理论与实践相结合,培养学生具备扎实的操作系统能力。

在教学过程中,要求学生积极参与讨论、实践,达到学以致用的目的。

课程目标分解为具体学习成果,以便后续教学设计和评估,确保学生能够全面掌握操作系统知识,提高实践能力。

二、教学内容本课程教学内容主要包括以下几部分:1. 操作系统概述:介绍操作系统的发展历程、功能、分类及其在计算机系统中的作用。

2. 进程管理:讲解进程与线程的概念、进程调度算法、进程同步与互斥、死锁与饥饿问题。

3. 内存管理:阐述内存分配策略、虚拟内存技术、页式和段式存储管理、内存碎片问题。

4. 文件系统:介绍文件和目录结构、文件权限控制、文件系统性能优化、磁盘空间分配策略。

5. 设备管理:讲解设备驱动程序、I/O调度策略、中断处理、设备分配与回收。

6. 操作系统实例分析:以Linux操作系统为例,分析其内核架构、进程管理、内存管理、文件系统等关键技术。

7. 操作系统性能评价与优化:介绍操作系统性能指标、性能评价方法、常用优化策略。

教学内容根据课程目标和教材章节进行合理安排,保证教学内容的科学性和系统性。

操作系统课程设计报告模板

操作系统课程设计报告模板

中文题目英文题目设计报告作者:学生1 学生2 学生3 学生4 学生5 指导教师:李新荣团队照片口号:《操作系统课程设计》任务书设计目的:本课程设计是学生学习完《操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

设计时间:两周。

设计要求:1.每5人组成一个团队,每个团队开发一个操作系统内核,内核具有传统操作系统的基本功能,包括:处理机管理、内存管理、设备管理、作业管理、用户接口等。

每部分的算法可根据需要简单或复杂。

2.课程设计做完后,按组进行验收和答辩,验收和答辩合格后,给出相应的成绩。

3.每个团队写一份课程设计报告,要在报告中写明分工情况。

4.课程报告要按照模版撰写,报告中要写明:(1)软件功能描述(2)界面说明(3)程序处理流程(4)任务的定义及实现(5)调试过程中遇到的问题和解决的方法(6)进一步改进方案和应用建议(7)使用说明书设计步骤:1.选定题目,每组提交设计方案(初期检查);2.项目中期检查,每个团队提交中期检查报告,写出目前开发状况;3.项目验收和答辩。

成绩评定:课程设计成绩按100分制计算,评定的依据有考勤、设计文档资料、项目验收和答辩四个成绩组成。

总成绩=考勤*10%+设计文档*30%+项目验收*40%+答辩*20%。

提交的资料:课设完成后要提交项目的设计方案、用户手册、源程序等内容,课设提交具体内容见下面的清单:课设提交内容清单注:(1)开发文档交打印版,提交完整的设计报告。

(2)刻光盘:以上所有内容均放到光盘中,每组一分提交时间:12月18号摘要在计算机网络高速发展的今天,计算机技术不断地更新与完善,无论是硬件还是软件的变更都会在计算机操作系统的设计技术与使用风格上得到体现。

操作系统是计算机系统配置的所有软件中使用最广泛的基础软件,它在整个计算机系统软件中处于中心地位,也是计算机专业课教学中做重要的环节之一。

操作系统课程设计(银行家算法设计)

操作系统课程设计(银行家算法设计)

《 操作系统 》课程设计报告系 别: 信息科学与技术系专业班级:学生姓名:指导教师:(课程设计时间:2010年7月5日——2010年7月9日)目 录一、课程设计目的和意义 (3)二、课程设计题目描述及算法 (3)三、课程设计报告内容 (3)1.算法描述 (3)2.数据结构 (4)3.主要函数说明 (4)4.算法流程图 (5)5.运行结果及说明 (7)6.附录清单及分析 (8)四、总结 (14)一、课程设计目的和意义了解掌握银行家算法,学会模拟实现资源分配,同时有要求编写和调试一个系统分配资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生二、课程设计题目描述及算法题目:银行家算法设计设计要求:编制银行家算法通用程序,并检测所给状态的系统安全性。

设进程I提出请求Request[N],则银行家算法按如下规则进行判断。

(1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。

(2)如果Request[N]<=AVAILABLE,则转(3);否则,出错。

(3)系统试探分配资源,修改相关数据:AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

上述三个矩阵存在如下关系:Need[i,j]= Max[i,j]- Allocation[i,j]三、课程设计报告内容1.算法描述设Request[i] 是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K 个Rj类型的资源,当Pi发出资源请求后,系统按下面步骤进行检查:,便转向步骤2;否则认为出错,因为它所需(1)如果Requesti[j]<=Need[i,j]要的资源数已超过它所宣布的最大值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.设计题目
第31题:操作系统接口:兼容Unix/Linux命令接口。

要求:
1)为Windows操作系统建立一个兼容Unix命令的命令接口;
2)实现命令包括ls,cat,cp,mv,md,rd,cd,sort,more,print,
命令的内容与详细格式请查阅unix命令手册;
3)设计命令的名称、参数等格式。

4)可以字符形式接收命令,执行命令,然后显示命令执行结果;
二.设计原理及算法描述
UNIX命令:
ls [选项]
列出文件信息(默认为当前目录)
ls无参显示一个目录中的文件和子目录
ls -l每行仅显示一个目录或名称
ls --help 显示此帮助信息并离开
mkdir目录
若目录不存在则创建目录
mkdir --help显示此帮助信息并离开
rmdir目录
若目录没有数据则删除目录
rmdir --help显示此帮助信息并离开
cp来源文件目的文件
将来源文件复制到目的文件
cp --help显示此帮助信息并离开
cat文件
或:cat 文件1 >> 文件2
显示文件内容或连接两个文件,并将结果输出到显示屏上
cat文件将文件的内容输出到显示屏上
cat 文件1 >> 文件2将文件1连接到文件2的结尾,并输出到显示屏上
cat --help 显示此帮助信息并离开
more文件
使文件能逐行(回车键)或逐页(空格键)显示并显示当前文件所占总文件的百分比
more --help显示此帮助信息并离开
mv文件1 文件2
或:mv 文件目录重命名或移动文件
mv 文件1 文件2将文件1名字改为文件2的名字
mv 文件目录将指定文件移动到指定目录下
mv --help显示此帮助信息并离开
sort文件
将文本文件内容加以排序
sort --help显示此帮助信息并离开
按照每个命令的功能编写一个实现函数。

通过c++字符串操作从输入流获得指令以及参数,通过对指令以及参数的判别调用对应指令的函数,实现对windows内文件的各项操作。

三.开发环境
硬件环境:
个人PC机
软件环境:
Microsoft Windows XP
Microsoft Visual C++ 6.0
四.重要算法和设计思路描述
命令以及参数的获取:由于命令加参数最多能有四部分,所以申请4个字符串数组。

并且将首地址都初始化为NULL,在后面的函数中用作判断输入参数的个数。

根据输入流中的空格来分割命令和
参数以及参数和参数。

每检测到一个空格,即将前面的输入字符加
上字符串结束符一起存入申请到的字符串数组中。

命令以及参数的判断:strcmp。

参数个数的判断:观察后三个字符串数组首地址是否为NULL。

利用以下一些API函数实现unix命令要求实现的功能,对windows
里的文件进行操作。

BOOL WINAPI SetCurrentDirectory( __in LPCTSTR lpPathName); 切换当前进程的当前工作目录。

HANDLE FindFirstFile( LPCTSTR lpFileName, // file name LPWIN32_FIND_DATA lpFindFileData // data buffer
); 该函数到一个文件夹(包括子文件夹)去搜索指定文件
如果要使用附加属性去搜索文件的话可以使用FindFirstFileEx函

DWORD GetCurrentDirectory(
DWORD nBufferLength, // size of directory buffer
LPTSTR lpBuffer // directory buffer
); 获取当前进程的当前目录
BOOL CreateDirectory(LPCTSTR lpPathName,
LPSECURITY_ATTRIBUTES lpSecurityAttributes ); 创建一个新目录
HANDLE CreateFile(
LPCTSTR lpFileName, //指向文件名的指针
DWORD dwDesiredAccess, //访问模式(写/读)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile //用于复制文件句柄
); 这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台缓冲区
五.程序实现——数据结构
doc.h中用#define 宏定义了各命令的帮助文档。

function.h中用API函数和一些简单的字符串操作实现了每个命令要求的功能。

cmd.cpp中定义了获取命令及参数的方法,用if…else…结构对命令及参数进行判断并调用对应的函数。

六.程序实现——程序清单
见程序包
七.课程设计总结
经过一个星期的课程设计,经历的困难一语难尽。

整个课程设计期间我们失落过,也曾一度热情高涨。

从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我们回味无长。

生活就是这样,汗水预示着结果也见证着收获。

劳动是人类生存生活永恒不变的话题。

通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义。

我想说,设计确实有些辛苦,但苦中也有乐,在如今浮躁的生活中,很少有机会能静下心来做一个设计,但我们可以,一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契。

在一次次的试验中,我们收获的不仅是程序设计的技能更加是耐心和经验,还有做课程设计的心态。

一行代码的错误直接影响着最后的结果,这就让我们每一个语句都编写的仔细。

最让人苦恼的是完全按设计原理的编程,执行结果却依然不对,这时候,我们需要分析错误的原因,逐步排查。

最终验收成功的时候我们由衷的高兴。

当然,这与老师的指导和示范十分不开的,正是有了老师耐心的指导和对于错误原因分析的帮助,才有了我们的对操作系统的接口的新认识。

对我而言,知识上的收获重要,精神上的丰收更加可喜。

挫折是一份财富,经历是一份拥有。

这次实习必将成为我人生旅途上一个非常美好的回忆!
再次感谢老师的教学与指导,老师您辛苦了。

八.参考文献
[1].汤子瀛,哲凤屏,汤晓丹.计算机操作系统[M].西安:西安电子科技大学出版社,2001
[2].龙晋元.UNIX操作系统教程[M].西安:西北电讯工程学院出版社,1995
[3].王刚.LINUX命令、编辑器与Shell编程[M].北京:清华大学出版社,2012
[4].罗宇,褚瑞.操作系统课程设计[M].北京:机械工业出版社,2005。

相关文档
最新文档