天津科技大学操作系统课程设计

合集下载

天津科技大学计算机操作系统实验报告-实验二

天津科技大学计算机操作系统实验报告-实验二

2016-2017学年第一学期计算机操作系统实验报告专业:计算机科学与技术班级:141011班学号:14101103姓名:傅开煤提交日期:2016年11月8日实验二Windows线程同步机制【开发语言及实现平台或实验环境】C++/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET【实验目的】(1) 了解Windows线程同步机制;(2) 了解互斥体,并通过查阅资料理解互斥体对象的使用方法;(3) 了解事件,并通过查阅资料理解事件对象的使用方法;(4) 了解关键区,并通过查阅资料理解关键区对象的使用方法;(5) 了解信号量,并通过查阅资料理解信号量对象的使用方法;(6) 利用Windows线程同步机制,模拟生产者消费者问题。

【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3) 完成实验报告。

【实验结果与分析】1.(1)多次运行2-1(mutex).cpp后,其中之一的执行结果如下图:(2)多次运行修改之后的2-1(mutex).cpp,其中之一的执行结果如下图:分析:修改之前,在指定暂停的时间Sleep(1000)内,thread1和thread2随机售票,出现多种情况;将两个子函数中注释掉的Sleep(1)语句让其可用后,thread1和thread2交替售票,即thread1在其暂停的时间Sleep(1)内,thread2获得了对共享对象hMutex的所有权,开始售票,同理当thread2在其暂停的时间Sleep(1)内,thread1获得了对共享对象hMutex 的所有权,开始售票,这样thread1和thread2就实现了交替售票。

2.(1)多次运行2-2(event).cpp后,其中之一的执行结果如下图:(2)多次运行修改之后的2-2(event).cpp,其中之一的执行结果如下图:3. (1)多次运行2-3(critical_section).cpp后,其中之一的执行结果如下图:(2)多次运行修改之后的2-3(critical_section).cpp,其中之一的执行结果如下图:分析:以上2-2(event).cpp 、2-3(critical_section).cpp的分析与2-1(mutex).cpp相同。

操作系统课程设计

操作系统课程设计

操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型和结构,掌握操作系统的五大核心功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口);2. 掌握操作系统的发展历程、主要操作系统(如Windows、Linux、Mac OS)的特点及应用场景;3. 了解操作系统的设计与实现原理,包括进程管理、内存管理、设备管理、文件系统等关键技术;4. 学会使用操作系统提供的命令行或图形界面进行基本的系统操作与维护。

技能目标:1. 培养学生对操作系统的实际操作能力,能够熟练使用至少一种操作系统进行日常管理与维护;2. 培养学生运用操作系统原理解决实际问题的能力,如分析系统性能、诊断故障、优化配置等;3. 提高学生的编程能力,使其能够编写简单的系统程序或脚本,实现特定功能。

情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学生学习计算机科学的热情;2. 培养学生的团队合作意识,使其在讨论、分析、解决问题的过程中学会倾听、交流、协作;3. 培养学生具备良好的信息素养,关注操作系统领域的最新发展,增强信息安全意识。

课程性质:本课程为计算机科学与技术专业(或相关领域)的必修课,具有较强的理论性和实践性。

学生特点:学生已具备一定的计算机基础知识,具有较强的学习兴趣和动手能力,但可能对操作系统原理的理解和应用尚有不足。

教学要求:注重理论与实践相结合,以案例驱动、任务导向的方式进行教学,注重培养学生的实际操作能力和问题解决能力。

通过本课程的学习,使学生能够掌握操作系统的基本原理,提高实际应用水平,为后续专业课程学习打下坚实基础。

二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能、类型,比较不同操作系统的特点,分析操作系统的发展趋势。

教材章节:第一章 操作系统概述2. 进程与线程管理:讲解进程与线程的概念、状态与转换,进程调度算法,同步与互斥,死锁与饥饿问题。

教材章节:第二章 进程管理3. 存储管理:介绍内存分配与回收策略,虚拟内存技术,页面置换算法,内存保护机制。

《操作系统》课程设计

《操作系统》课程设计

《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。

技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。

情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。

课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。

学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。

在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。

二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。

- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。

- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。

- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。

操作系统期末课程设计《操作系统原理课程设计》报告封面和要求

操作系统期末课程设计《操作系统原理课程设计》报告封面和要求

操作系统期末课程设计进程调度算法模拟一、设计目的编程实现进程调度的算法,更好地掌握操作系统的原理及实现方法,从而有利于把握进程调度细节。

二、设计要求(1)要求实现先来先服务,短作业优先,时间片轮转,高优先权调度算法四种算法并进行对比分析.(2)要求界面简单,易懂,关键代码部分要注释.(3)编程语言可以采用自己任意精通的语言三、设计思想说明先来先服务:程序的执行调度顺序按先进入队列的先获得执行,并且其他进程都不能中断正在执行的进程,要等进程完成后才能,让出CPU给其他进程。

执行的时候可以随时在队列中插入进程。

短作业优先:进程的调度顺序按程序的服务时间来决定,进程的执行顺序。

服务时间短的先被调用。

调度时先从队列中选取服务时间最短的进程来执行。

进程中途不能中断,即使此时队列中存在服务时间比其更短的进程,仍需要等待该进程执行完后才能被执行。

高优先权调度:选取进程中优先级最高的一个,以优先级的值大,优先级就大。

调度时总是选取队列中进程优先级最高的来执行,不管是否有某个进程在执行,只要存在比正在执行进程优先级高的进程,则就会立刻中断正在执行的进程,让给跟高优先级的进程。

时间片轮转:本课程设计采用多级反馈队列调度算法,设立4个进程队列,分给队列1的时间片为3秒,队列2的时间片为6秒,队列3的时间片为12秒,队列4的时间片为24秒。

队列1的优先级最高,队列4的优先级最低。

高优先级的队列没执行完,即不为空,就永远不执行其下面的低优先级的队列里面的进程。

当执行低优先级队列里面的进程时,突然间高优先级的队列插入了进程就立刻跳到高优先级的队列执行其里面的进程。

每个队列的进程都是按先来先执行的顺序执行。

进程初次执行肯定要进入队列1。

如何从头到尾执行一遍队列1中的进程是,存在某些进程在队列1的时间片内还没执行完,就把进程移交到下一个队列中。

每个队列都如此类推。

直到最后一个队列4,如果在队列4还有进程在本时间片内还没没执行完,就把该程序放到队尾,从新等待时间片执行。

天津科技大学嵌入式操作系统---第3章 基于linux的嵌入式软件开发

天津科技大学嵌入式操作系统---第3章 基于linux的嵌入式软件开发
3.1.1 嵌入式软件体系结构 3.1.2 基于Linux的嵌入式软件
18:19
4
3.1.1 嵌入式软件体系结构
18:19
5
1. 设备驱动层
设备驱动层是嵌入式系统中必不可少的重 要部分,使用任何外部设备都需要有相应 驱动程序的支持,它为上层软件提供了设 备的操作接口。 上层软件不用理会设备的具体内部操作, 只需调用驱动层程序提供的接口即可。 驱动层一般包括硬件抽象层HAL、板级支 持包BSP和设备驱动程序。
18
3.2.2 基于开发板的二次开发
所谓二次开发是利用现成的开发板进行开发,不同于通用 计算机和工作站上的软件开发工程,一个嵌入式软件的开 发过程具有很多特点和不确定性。其中最重要的一点是软 件跟硬件的紧密耦合特性。 由于嵌入式系统的灵活性和多样性,这样就给软件设计人 员带来了极大地困难。第一,在软件设计过程中过多地考 虑硬件,给开发和调试都带来了很多不便;第二,如果所 有的软件工作都需要在硬件平台就绪之后进行,自然就延 长了整个的系统开发周期。这些都是应该从方法上加以改 进和避免的问题。 为了解决这个问题,通常的做法是基于某种开发板做二次 开发,从这个角度看,硬件开发所占的比重不到20%,而 软件开发的比重占到了80%。
3.1 嵌入式软件结构 3.2 嵌入式软件开发流程 3.3 嵌入式linux开发环境 3.4 嵌入式系统引导代码 3.5 linux内核结构及移植 3.6 嵌入式文件系统及移植 3.7 linux设备驱动概述 3.8 设备驱动程序接口 3.9 linux设备驱动开发流程
18:19 3
3.1 嵌入式软件结构
?在嵌入式开发中经常要面对设备驱动程序的开发嵌入式系统通常有许多设备用于与用户交互象触摸屏小键盘滚动轮传感器在嵌入式开发中经常要面对设备驱动程序的开发嵌入式系统通常有许多设备用于与用户交互象触摸屏小键盘滚动轮传感器rs232接口lcd等等

操作系统课程设计实验报告(附思考题答案)

操作系统课程设计实验报告(附思考题答案)

操作系统课程设计实验报告(附思考题答案)课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期)名称:操作系统综合实验题目:oslab综合实验院系:计算机系班级:学号:学生姓名:指导教师:设计周数:分散进行成绩:日期:2015 年10 月29 日一、综合实验的目的与要求1. 理解和掌握操作系统的基本概念、基本组成与工作原理;2. 理解和掌握操作系统中主要功能模块的工作原理及其实现算法;3. 掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力。

二、实验正文实验1:实验环境的使用1.1实验目的:1.熟悉操作系统集成实验环境OS Lab 的基本使用方法。

2.练习编译、调试EOS 操作系统内核以及EOS 应用程序。

1.2实验内容:1.启动OS Lab2.学习OS Lab 的基本用法● 新建 Windows 控制台应用程序项目(1)在“文件”菜单中选择“新建”,然后单击“项目”。

(2)在“新建项目”对话框中,选择项目模板“控制台应用程序(c)”。

(3)在“名称”中输入新项目使用的文件夹名称“oslab ”。

(4)在“位置”中输入新项目保存在磁盘上的位置“C:\test ”。

(5)点击“确定”按钮。

● 生成、执行项目●3.EOS 内核项目的生成和调试● 新建 EOS 内核项目并按F7生成项目● 调试项目● 查看软盘镜像文件中的内容、EOS SDK (Software Development Kit )文件夹4.EOS 应用程序项目的生成和调试● 新建 EOS 应用程序项目● 修改 EOS 应用程序项目名称使用断点中断执行查看变量的值5.退出OS Lab6.保存EOS内核项目1.3思考与练习●在实验1中,生成EOS SDK文件夹的目的和作用是什么?答:SDK文件夹中提供了开发EOS应用程序需要的所有文件。

debug文件夹是在使用debug配置生成项目时生成的,其中存放了调试版本的EOS二进制文件。

天津科技大学嵌入式操作系统---第5章 嵌入式数据库


2. 嵌入式数据库的分类
可以按照嵌入的对象不同分为:软件嵌入数据 库、设备嵌入数据库、内存数据库。 也有人将它们粗略的分为:嵌入数据库、移动 数据库、小型的C/S结构数据库等。
小型C/S数据库。这种数据库其实是企业级数据库的 一个缩小版,缩小以后可以在一些实时性要求不高 的设备内运行。它只和操作系统有关,一般只能支 持一些常见的移动操作系统,如,Linux和 WindowsCE系列。
21
5.2 SQLite数据库
5.2.1 SQLite数据库概述 5.2.2 SQLite数据库的安装 5.2.3 SQLite数据库基本命令 5.2.4 SQLite数据库管理命令 5.2.5 SQLite的API函数 5.2.6 SQLite实例分析
22
5.2.1 SQLite数据库概述
1. 概述 2. SQLite组件 3. 数据类型
多线程编程
1
第5章 嵌入式数据库
5.1 嵌入式数据库概述 // 5.2 SQLite数据库 5.3 mSQL数据库 // 5.4 Berkeley DB数据库//
2
5.1 嵌入式数据库概述
5.1.1嵌入式数据库简介 5.1.2 嵌入式数据库的特点及分类 5.1.3 嵌入式数据库的应用
3
5.1.1嵌入式数据库简介
18
5.1.3 嵌入式数据库的应用
3.地理信息系统
地理信息包括的范围很广,在国外地理信息系统已经发 展了很多年,国内这几年也逐渐加大对地理信息系统方 面的投入。嵌入式数据库在地理信息系统方面的应用非 常广泛。如,空间数据分析系统、卫星天气数据、龙卷 风和飓风监控及预测等等。几乎涉及到地理信息的方方 面面。
14
1. 嵌入式数据库的特点

操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、设计目的操作系统课程设计旨在让学生深入了解操作系统的基本原理,掌握操作系统的设计与实现方法,培养学生在实际操作系统中分析和解决问题的能力。

通过本次课程设计,学生将能够:1. 加深对操作系统理论知识的理解与应用;2. 提高动手实践能力,培养创新精神和团队协作意识;3. 为今后从事操作系统相关领域的研究和工作奠定基础。

二、设计要求(1)进程管理:包括进程的创建、撤销、调度等;(2)内存管理:实现内存分配、回收、页面置换等;(3)文件系统:实现文件的创建、删除、读写等操作;(4)设备管理:实现设备的分配、回收、驱动等功能。

(1)代码规范:编写清晰、易读、易维护的代码;(3)团队协作:合理分工,确保团队成员共同参与、共同进步。

三、设计步骤1. 需求分析:分析课程设计所需实现的功能,明确各个模块的具体要求;2. 概要设计:根据需求分析,制定总体设计方案,划分模块,确定模块间接口;3. 详细设计:针对每个模块,进行具体实现方案的设计;4. 编码实现:按照设计文档,编写代码,实现各个功能模块;5. 测试与调试:对实现的功能进行测试,发现问题并进行调试;6. 优化与改进:根据测试结果,对代码进行优化,提高系统性能;四、预期成果1. 完成一套具有基本功能的模拟操作系统,能够演示进程管理、内存管理、文件系统和设备管理的主要操作;2. 提供完整的,包括注释,以便他人理解和学习;3. 形成一份详尽的课程设计报告,记录设计过程中的思考、遇到的问题及解决方案;4. 通过课程设计,提升个人在操作系统领域的理论知识和实践能力。

五、评价标准1. 功能完整性:各功能模块是否按照要求实现,系统是否能正常运行;3. 创新性:设计过程中是否有独特的想法,是否对现有技术有所改进;4. 团队协作:团队成员之间沟通是否顺畅,分工是否合理,协作是否高效;5. 文档质量:课程设计报告是否详细、准确,是否能够完整反映设计过程和成果。

操作系统课程设计

操作系统课程设计
一、设计背景
操作系统是计算机科学与技术专业中一门重要的基础课程。通过操作系统课程的学习与设计,可以让学生综合运用所学的计算机基础知识与技术,深入理解操作系统的原理与设计,培养学生的系统分析与设计能力,提高其对计算机系统的理解和掌握。
二、设计目标
本次操作系统课程设计的目标是设计一个简单的操作系统,使学生能够通过该项目的实践,加深对操作系统原理的理解,掌握操作系统的设计与实现方法,培养学生的系统编程能力。
•进程管理模块:负责进程的创建、终止、调度等操作;
•内存管理模块:负责内存的分配与回收,实现虚拟内存管理;
•文件系统模块:负责文件的创建、打开、读写等操作;
•输入输出模块:负责处理输入输出设备的控制与数据传输。
2.
学生需要选择一种合适的进程调度算法,结合自己设计的操作系统,实现进程的调度与管理。可以选择的调度算法包括FCFS、SJF、RR、优先级调度等。
五、完成时间
学生需要根据教师的要求,按时完成操作系统课程设计的所有任务。完成时间一般为一个学期,具体时间安排由教师决定。
六、评价方法
学生的操作系统课程设计将进行评价,根据以下几个方面进行评分:
•设计报告质量:包括设计思路、实现方法和测试结果的描述与分析;
•系统功能完整性:系统的各个功能是否齐全并能正常运行;
•系统性能优化:是否进行了系统性能的优化,提高了系统的性能;
•代码质量:代码的规范性、可读性和可维护性;
•团队合作能力:学生在项目中的团队合作表现等。
七、ቤተ መጻሕፍቲ ባይዱ结
操作系统课程设计是一项重要的实践性项目,通过对操作系统的实际设计与实现,学生既可以提高对操作系统原理的理解,又可以培养系统编程与分析问题的能力。通过本次设计,学生可以更加深入地掌握操作系统的各个方面,为以后从事相关工作打下坚实的基础。

操作系统教程第四版课程设计

操作系统教程第四版课程设计一、课程介绍本课程是操作系统教程第四版的课程设计,旨在通过实践,帮助学生更深刻的理解和掌握操作系统的基本原理和应用技术。

该课程涵盖了进程管理、内存管理、文件系统、输入输出系统等内容,并要求学生编写各种操作系统模块的实现。

二、教学目标1.了解操作系统的基本原理和应用技术,理解操作系统的内核结构和运行机制。

2.掌握常用的进程管理、内存管理、文件系统、输入输出系统等操作系统模块的实现原理和实现方法,能够编写相应的操作系统模块。

3.培养学生的自主学习和问题解决能力,提高学生的动手实践能力和实际操作能力。

三、教学内容1. 进程管理1.进程管理的基本概念和原理。

2.进程状态、进程控制块、进程调度等相关知识。

3.进程同步和互斥机制,包括信号量、互斥量、条件变量等。

4.进程通信和IPC机制,包括管道、消息队列、共享内存、信号等。

2. 内存管理1.内存管理的基本概念和原理。

2.内存分配和回收算法,包括首次适应、最优适应、最坏适应等算法。

3.虚拟内存和页面置换算法,包括LRU、FIFO、CLOCK等算法。

3. 文件系统1.文件系统的基本概念和原理。

2.文件系统的组成和层次结构,包括文件目录、文件存储、文件分配等。

3.文件系统的缓存和缓存替换算法,包括FIFO、LRU等算法。

4. 输入输出系统1.输入输出系统的基本概念和原理。

2.输入输出设备的驱动程序实现和设备管理。

3.中断处理和DMA机制,包括中断优先级、中断向量表等。

4. 设计要求1.实现一个简单的操作系统内核,包括进程管理、内存管理、文件系统、输入输出系统等模块实现。

2.这个操作系统内核可以在基本硬件环境下运行,支持多道程序,多用户访问,可以支持多种文件系统格式。

3.学生需要用C、汇编等语言编写相应的代码,实现操作系统内核的各个模块,并进行相应的调试和测试。

4.学生需要撰写相应的实验报告,记录设计思路、代码实现和测试结果。

四、教学方法1.课堂讲解:老师通过课件和案例讲解操作系统的基本原理和应用技术。

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

2014-2015学年第一学期操作系统课程设计实验指导书专业:软件工程班级:121031学号:121031姓名:提交日期:2015.1.7操作系统课程设计【设计题目】Linux二级文件系统设计【设计目的】(1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。

(2)结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。

(3)通过分对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【设计内容】为Linux系统设计一个简单的二级文件系统。

要求做到以下几点:①可以实现下列几条命令:login 用户登录dir 列目录Attrib 修改文件属性create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录②列目录时要列出文件名,物理地址,保护码和文件长度③源文件可以进行读写保护【开发语言及实现平台或实验环境】C++/VC++【相关知识综述】理解二级目录的文件系统的组织;掌握常用的数据结构;系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件;使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。

【设计思路】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。

另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。

首先应确定文件系统的数据结构:主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。

用户创建的文件,可以编号存储于磁盘上。

如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记1.主要的数据结构#define MAXNAME 25 /* mfdname,ufdname,filename表示三种文件的长度25*/#define MAXCHILD 50 /*the largest child每个用户下可以最多有50个文件*/#define MAX(MAXCHILD*MAXCHILD) /*the size of fpaddrno 定义一个常量2500个扇区*/typedef struct /*the structure of OSFILE*/{int fpaddr; /*file physical address物理地址*/int flength; /*file length文件长度*/int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write; 3-Protect;*/ char fname[MAXNAME]; /*file name文件名*/} OSFILE;typedef struct /*the structure of OSUFD*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD; /*osf文件的数据结构*/typedef struct /*the structure of OSUFD'LOGIN*/{char ufdname[MAXNAME]; /*ufd name*/char ufdpword[8]; /*ufd password*/} OSUFD_LOGIN;typedef struct /*file open mode*/{int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-read only,1-write only,2-read and write,3-initial*/}OSUFD_OPENMODE;2.主要函数void LoginF(); /*LOGIN FileSystem*/void DirF(); /*Dir FileSystem*/void CdF(); /*Change Dir*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify FileMode*/void OpenF(); /*Open File*/void CloseF(); /*Close File*/void ReadF(); /*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit FileSystem退出文件系统*/void help();3.总体功能程序结构图(1)open():(4)delete【源程序清单】void OpenF(){char fname[MAXNAME];int i,k;if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError! You can only open file in yourself dir.\n");}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==1){printf("\nError. file \'%s\' had been opened, it can not be opened again.\n",fname);}else{if((ufd[k]->ufdfile[i].fmode==0)||(ufd[k]->ufdfile[i].fmode==1)||(ufd[k]->ufdfile[i].fmode== 2)){ifopen[k][i].ifopen=1;ifopen[k][i].openmode=(ufd[k]->ufdfile[i].fmode);printf("\'%s\' has been opened successfully!",fname);}elseprintf("\n\'%s\' is a protected file, it can not be opened.",fname);}}else{printf("\nError.\'%s\' dose not exist.\n",fname);}}}void CloseF(){char fname[MAXNAME];int i,k;if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError.You can only modify filemode in yourself dir.\n");}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==0){printf("\nError. \'%s\' has been closed. you can not close it again.\n",fname);}else{ifopen[k][i].ifopen=0;ifopen[k][i].openmode=4;printf("\'%s\' has been closed successfully!",fname);}}else{printf("\nError. \'%s\' dose not exist.\n",fname);}}}void DeleteF(){char fname[MAXNAME];int i,k,x;char str[255],str1[255];if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError. You can only delete file in yourself dir.\n");}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ufd[k]->ufdfile[i].fmode==3){printf("\n\'%s\' is a protected file, it can not be deleted.",fname);}else{if(ifopen[k][i].ifopen==1)printf("\n\'%s\' has been opened, it can not be deleted.",fname);else{itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);x =_unlink(str);fpaddrno[ufd[k]->ufdfile[i].fpaddr]=0;for(i;i<(fcount[k]-1);i++){ufd[k]->ufdfile[i]=ufd[k]->ufdfile[i+1];}fcount[k]--;printf("\'%s\' has been deleted successfully!",fname);}}}else{printf("\nError. \'%s\' dose not exist.\n",fname);}}}void WriteF(){char str[50],str1[50];int i,k,n=0;int length=0;char c;char fname[MAXNAME];char *rtrim(char *str);char *ltrim(char *str);int ExistF(char *filename);int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0){printf("\nError.Please convert to ufd dir before write.\n");return;}else{printf("\nCaution:Open file first\n");printf("Opened File(s) List:\n");k=ExistD(dirname);for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1)if ((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)){printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0))printf("\n");}printf("\n%d files openned.\n",n);if (n==0)return;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){if((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2)){itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1); /*str形成路径c:\\osfile\\file\\filex*/fp_file=fopen(str,"wb+");printf("Please input text(\'#\' stands for end):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c);if (c!='\n')length++;}getchar();fprintf(fp_file,"\n");fclose(fp_file);printf("write successfully!\n");ufd[k]->ufdfile[i].flength=length;}else{printf("\nError.\'%s\' has been opened with read ONL Y mode. It isn\'t write.\n",fname);}}else{printf("\nError.\'%s\' is in closing status. Please open it beforewrite\n",fname);}}else{printf("\nError. \'%s\' does not exist.\n",fname);}}}}【测试结果】登录helpdir,openwriteclosecls【设计总结】这两周的课程设计时间非常短,从中学习到很多知识,也为我们的学习提供了良好的实践平台。

相关文档
最新文档