实验三 虚拟文件管理
操作系统实验报告6
操作系统实验报告6一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关技术,通过实际操作和观察,增强对操作系统工作原理的理解,并提高解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,实验工具包括 Visual Studio 2019 等。
三、实验内容(一)进程管理实验1、创建多个进程,并观察它们的运行状态和资源占用情况。
通过编写简单的C++程序,使用Windows API 函数创建多个进程。
在程序中,设置不同的进程优先级和执行时间,观察操作系统如何调度这些进程,以及它们对 CPU 使用率和内存的影响。
2、进程间通信实现了进程间的管道通信和消息传递。
通过创建管道,让两个进程能够相互交换数据。
同时,还使用了 Windows 的消息机制,使进程之间能够发送和接收特定的消息。
(二)内存管理实验1、内存分配与释放使用 C++的动态内存分配函数(如`malloc` 和`free`),在程序运行时动态申请和释放内存。
观察内存使用情况,了解内存碎片的产生和处理。
2、虚拟内存管理研究了 Windows 操作系统的虚拟内存机制,通过查看系统的性能监视器,观察虚拟内存的使用情况,包括页面文件的大小和读写次数。
(三)文件系统实验1、文件操作进行了文件的创建、读取、写入、删除等基本操作。
通过编写程序,对不同类型的文件(如文本文件、二进制文件)进行处理,了解文件系统的工作原理。
2、目录操作实现了目录的创建、删除、遍历等功能。
了解了目录结构在文件系统中的组织方式和管理方法。
四、实验步骤(一)进程管理实验步骤1、打开 Visual Studio 2019,创建一个新的 C++控制台项目。
2、在项目中编写代码,使用`CreateProcess` 函数创建多个进程,并设置它们的优先级和执行时间。
3、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验在计算机科学中,操作系统是一种系统软件,负责管理计算机硬件和软件资源,并为用户和应用程序提供接口。
文件管理系统是操作系统的一个重要组成部分,它负责管理计算机系统中的文件和目录,以及提供对它们的访问和操作。
本次实验旨在模拟操作系统中文件管理系统的基本功能和操作。
我们将使用一个虚拟的文件系统,通过命令行界面来模拟用户与文件系统的交互。
以下是实验的具体内容和步骤:1. 创建虚拟文件系统首先,我们需要创建一个虚拟的文件系统。
文件系统由文件和目录组成,可以通过树状结构来表示。
我们可以使用一个数据结构来模拟文件系统的存储和管理。
2. 初始化文件系统在开始操作文件系统之前,我们需要初始化文件系统。
这包括创建根目录和设置当前目录为根目录。
3. 文件和目录的创建与删除文件和目录是文件系统的基本单位。
我们可以通过命令来创建和删除文件和目录。
例如,使用"mkdir"命令创建一个目录,使用"touch"命令创建一个空文件,使用"rm"命令删除文件或目录。
4. 文件和目录的访问权限文件和目录可以设置不同的访问权限,以保护文件系统的安全性。
我们可以使用"chmod"命令来修改文件或目录的权限。
权限通常包括读、写和执行权限。
5. 文件和目录的重命名和移动我们可以使用"mv"命令来重命名文件或目录,使用"cp"命令来复制文件或目录,使用"mv"命令来移动文件或目录。
6. 文件和目录的查找和显示我们可以使用"ls"命令来显示当前目录下的文件和目录,使用"cd"命令来切换当前目录,使用"pwd"命令来显示当前目录的路径。
此外,我们还可以使用"find"命令来查找文件或目录。
7. 文件和目录的读写操作文件可以被读取和写入。
实验报告-Linux-实验三-Linux文件管理与常用命令
下面给出示例,如图3-2所示。
图3-2 more命令显示/etc/inittab文件
(3)less命令
该命令的功能和more命令的功能基本相同,也是用来按页显示文件。如果要按页显示/etc/inittab文件,显示效果,如图3-3所示。
图3-3 less命令显示/etc/inittab文件
3、熟悉Linux下常用的压缩归档工具gzip,bzip,tar,zip的相关操作。
实验仪器:
Windows 7装有Red Hat Enterprise Linux 5.2操作系统虚拟机PC机一台。
实验内容及步骤(或程序清单):
1、用root账户登录到终端,使用cat,more,less,head,tail等命令显示/etc/inittab文件。
图3-7复制/etc目录到/test
4、将/root/test/etc目录用tar命令打包成etc.tar.gz,查看etc.tar.gz的内容,解压缩etc.tar.gz。如图3-8所示。
实验内容及步骤(或程序清单):
图3-8 tar命令压缩/etc并解压缩
5、删除test目录,如图3-9所示。
图3-9删除test目录
通过该实验熟悉了linux操作系统文件及文件夹的相关命令操作掌握了linux下常用的压缩归档工具gzipbziptarzip的使用方法对今后学习linux操作系统起到很大帮助
姓名:黄兵周
学号:07
2013年10月16日
实验项目:文件管理与常用命令
实验目的:
1、熟悉文件显示的相关操作;
2、熟悉文件及文件夹的相关操作;
实验内容及步骤(或程序清单):
(4)head命令
实验3虚拟存储器管理
淮海工学院计算机科学系实验报告书课程名:《操作系统原理》题目:实验三虚拟存储器管理班级:Z软件52学号:2017140595姓名:郭文静1、实验目的与要求本实验模拟请求页式虚存管理系统的页面置换情况。
实验程序能模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。
要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。
并通过为该进程分配不同的实页数,来比较几种算法的稳定性。
2、实验内容或题目本实验要求使用C/C++语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。
其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。
要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。
程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。
实验说明:(1)设计中虚页和实页的表示本设计利用C/C++/Java语言的结构体来描述虚页和实页的结构。
在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。
pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。
time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。
在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。
pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。
next 是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。
(2)关于缺页次数的统计为计算命中率,需要统计在20次的虚页访问中命中的次数。
(VR虚拟现实)操作系统原理----文件虚拟管理
《操作系统原理》课程设计报告姓名:班级:学号:指导老师:年月日目录一、《操作系统原理》课程设计的目的与要求 (1)1、目标: (1)2、要求: (1)二、简述课程设计内容、主要功能和实现环境 (2)1、主要功能: (2)2、主要设计内容: (2)3、运行环境: (2)三、任务的分析、设计、实现和讨论 (3)1、任务的分析 (3)2、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明) (4)3、操作过程和结果分析 (7)4、思考题的解答和讨论 (11)四、《操作系统》课程设计小结(收获、不足与建议) (12)五、附录(主要源程序和运行结果的清单) (13)一、《操作系统原理》课程设计的目的与要求1、目标:随着社会信息量的极大增长,要求计算机处理的信息与日俱增涉及到社会生活的各个方面。
因此,文件管理是操作系统的一个极为重要的组成部分。
学生应该运用独立的高级语言来编写一个简单和可操作的文件操作系统,模拟文件管理的工程运作。
从而对各种文件操作指令的实质内容和过程原理有比较深刻的了解,掌握他们的实施方法加深理解课堂上讲授过的知识。
我小组需要实施的文件管理是任务六,包括文件系统的:建立,关闭以及写的功能。
2、要求:(1)设计一个多(n)用户的文件系统,每个用户户最多保存m个文件。
(2)限制用户在一次运行中只能打开一个文件。
(3)系统应能检查打入命令的正确性,出错是要能够显示出错的原因。
(4)对文件的权限必须有保护措施,如果只能运行,允许读,允许写等。
在每次打开文件时,根据本次打开的要求,设置保护级别,即可有二级保护。
(5)对文件的操作表述中必须有以下指令:建立: create()删除: delete()打开: open()关闭 close()读:read()写:write()二、简述课程设计内容、主要功能和实现环境此次实验的基本内容就是完成一个可执行的文件系统管理的操作系统。
1、主要功能:一个由10个用户的操作系统,每个用户最多保存10个文件,一次运行中用户可打开5个文件。
文件管理虚拟实验实验报告
文件管理虚拟实验实验报告《文件管理虚拟实验实验报告》一、实验目的:本实验的目的是通过使用文件管理虚拟实验平台,深入了解和掌握操作系统中的文件管理相关知识,包括文件的创建、打开、关闭、读写等操作,并通过实际操作来体验和理解文件的属性、权限以及目录的创建、删除等操作。
二、实验内容:1. 文件创建与打开:使用平台提供的命令或系统调用,创建一个文件并打开文件。
2. 文件写入与保存:向已打开的文件中写入一段文字,并保存文件。
3. 文件关闭:关闭已打开的文件。
4. 文件读取:从已打开的文件中读取并显示文件内容。
5. 文件权限设置:设置文件的权限属性,例如读、写、执行权限。
6. 目录创建与删除:创建一个新目录并删除该目录。
三、实验步骤:1. 登录文件管理虚拟实验平台。
2. 打开终端窗口,使用命令或系统调用创建一个文件,并打开该文件。
3. 在打开的文件中写入一段文字,保存文件。
4. 关闭已打开的文件。
5. 重新打开文件,并读取文件内容并显示。
6. 设置文件的权限属性,例如读、写、执行权限。
7. 创建一个新的目录。
8. 删除新目录。
四、实验结果:通过实验操作,我成功创建了一个文件,并且能够通过打开、写入、保存、关闭等操作对文件进行管理。
此外,我还能够设置文件的权限属性,例如读、写、执行权限,以及创建和删除目录。
五、实验心得:通过这次文件管理虚拟实验实验,我对操作系统中的文件管理有了更深入的理解和掌握。
通过实际操作,我更加熟悉了文件的创建、打开、关闭、读写等操作,并能够正确地设置文件的权限属性和对目录进行创建和删除操作。
在实验过程中,我发现文件管理是操作系统中非常重要的一部分,文件的管理涉及到了数据的存储、读取和保密等方面的内容。
合理地管理文件能够提高操作系统的效率和安全性。
此外,我还意识到文件的权限属性对文件的访问和使用具有重要的作用。
正确地设置文件的权限属性可以有效地保护文件的机密性和完整性,防止未经授权的访问和恶意操作。
操作系统虚拟文件系统实验报告
操作系统虚拟文件系统实验报告一、实验目的本实验旨在帮助学生理解操作系统中虚拟文件系统的概念和工作原理,通过实际操作来深入学习和掌握相关知识。
二、实验环境本次实验使用的操作系统为Linux,实验工具为虚拟机软件VMware Workstation。
三、实验步骤1. 创建虚拟机:首先启动VMware Workstation,创建一个新的虚拟机并安装Linux操作系统。
2. 挂载文件系统:在Linux系统中,使用命令行工具挂载一个文件系统到指定的目录,例如将/dev/sdb1挂载到/mnt目录下。
3. 创建文件:在挂载后的文件系统中,通过命令行工具创建若干个文件和目录,可以使用touch和mkdir命令。
4. 编辑文件内容:使用vim或者其他文本编辑工具,在创建的文件中添加一些内容。
5. 查看文件系统信息:使用df命令查看当前系统的文件系统使用情况,通过ls命令查看文件和目录的信息。
6. 卸载文件系统:使用umount命令卸载之前挂载的文件系统。
7. 实验总结:对本次实验的操作过程和结果进行总结,思考在实际应用中虚拟文件系统的意义和作用。
四、实验结果分析通过本次实验,我深入理解了操作系统中虚拟文件系统的概念和原理。
在实际操作过程中,我掌握了如何挂载和卸载文件系统,创建和编辑文件内容,以及查看文件系统信息的方法。
这些基本操作对于日常的系统管理和开发工作具有重要意义,能够有效地提高工作效率和便捷性。
五、实验感想本次实验虽然只是简单的操作演示,但对我理解操作系统的文件系统和虚拟化技术有着重要的意义。
通过亲身操作,我对虚拟文件系统的工作原理有了更加直观的认识,对操作系统中文件管理的流程和方式也有了更深入的理解。
这对我今后的学习和工作都具有积极的促进作用,我会继续学习和提升相关知识和技能,努力成为一名优秀的操作系统工程师。
六、实验总结通过本次操作系统虚拟文件系统的实验,我进一步巩固了相关知识,增强了对操作系统的理解和掌握。
操作系统虚拟文件系统实验报告
操作系统虚拟文件系统实验报告1. 引言本报告旨在总结并分析我们小组在操作系统虚拟文件系统实验中的经验和发现。
操作系统是计算机系统中非常重要的一个组成部分,负责管理计算机硬件和软件资源。
而虚拟文件系统(Virtual File System,VFS)则是操作系统中一个关键的抽象层,为用户和应用程序提供了统一的文件操作接口。
通过对虚拟文件系统的实验,我们深入了解了操作系统的内部实现原理,加深了对文件系统的理解。
2. 实验目的本次实验的主要目的是对操作系统的虚拟文件系统进行实践探索,通过实际操作和观察,加深对虚拟文件系统的理解,并熟悉常见的文件系统操作。
3. 实验环境我们使用了一台以Linux操作系统为基础的计算机作为实验平台,并采用虚拟机技术搭建了多个虚拟机实例,以便进行并行的多任务操作。
4. 实验过程与结果4.1 文件系统的创建与挂载首先,我们使用命令行工具创建了一个新的文件系统,并将其挂载到操作系统的指定目录上。
通过这一步骤,我们成功地在操作系统上创建了一个虚拟的文件系统,并使其能够被操作系统识别并访问。
4.2 文件的创建、读取和写入在实验过程中,我们创建了多个文件,并测试了文件的读取和写入功能。
我们发现,在虚拟文件系统下,文件的读取和写入操作是非常高效和稳定的。
通过在文件中写入不同类型的数据并进行读取,我们验证了文件系统的正确性和可靠性。
4.3 目录的创建和遍历除了文件操作外,我们还对虚拟文件系统中的目录进行了创建和遍历实验。
通过创建多层次的目录结构并遍历其中的所有文件和子目录,我们验证了虚拟文件系统对目录的管理和访问功能。
4.4 文件系统的扩展与压缩为了进一步探索虚拟文件系统的性能和可扩展性,我们对文件系统进行了动态扩展和压缩实验。
通过添加和删除大量文件,我们观察到文件系统的性能表现良好,并且在文件数量不断增加的情况下能够有效地管理和访问这些文件。
5. 实验总结与思考通过本次虚拟文件系统的实验,我们对操作系统的底层实现原理有了更深入的了解。
操作系统试验模拟文件管理系统
操作系统试验摹拟文件管理系统一、引言文件管理是操作系统中的重要组成部份,它负责对计算机中的文件进行组织、存储和访问。
摹拟文件管理系统是为了更好地理解文件管理的原理和实现方式而设计的一个实验项目。
本文将详细介绍摹拟文件管理系统的设计和实现。
二、设计目标1. 实现基本的文件管理功能,包括文件的创建、删除、打开和关闭。
2. 实现文件的读写操作,包括顺序读写和随机读写。
3. 实现文件的共享和保护机制,确保多个进程可以同时对同一个文件进行读写操作。
4. 实现文件的索引和目录结构,方便文件的查找和管理。
5. 实现文件的存储管理,包括空暇空间管理和磁盘分配算法。
三、系统设计1. 文件的创建和删除在摹拟文件管理系统中,可以通过命令行或者图形界面来创建和删除文件。
创建文件时,系统会为该文件分配一个惟一的文件标识符,并在文件目录中记录该文件的相关信息。
删除文件时,系统会释放该文件占用的存储空间,并从文件目录中删除该文件的记录。
2. 文件的打开和关闭在摹拟文件管理系统中,可以通过命令行或者图形界面来打开和关闭文件。
打开文件时,系统会根据文件标识符在文件目录中查找该文件的相关信息,并将该文件的描述符返回给用户进程。
关闭文件时,系统会释放该文件的描述符,并更新文件的相关信息。
3. 文件的读写操作在摹拟文件管理系统中,可以通过命令行或者图形界面来进行文件的读写操作。
顺序读写是指按照文件的存储顺序挨次读取或者写入文件的内容,而随机读写是指根据文件的索引或者偏移量来读取或者写入文件的内容。
系统会根据用户进程的读写请求,将相应的数据从磁盘中读取或者写入到内存中。
4. 文件的共享和保护机制在摹拟文件管理系统中,多个进程可以同时对同一个文件进行读写操作。
系统会通过锁机制来实现文件的共享和保护。
当一个进程正在对文件进行读写操作时,其他进程需要等待该进程释放文件的锁才干对文件进行读写操作。
同时,系统还可以设置文件的访问权限,确保惟独具有相应权限的进程才干对文件进行读写操作。
操作系统实验报告三
操作系统实验报告三一、实验目的本次操作系统实验的目的在于深入了解操作系统的进程管理、内存管理和文件系统等核心功能,通过实际操作和观察,增强对操作系统原理的理解和掌握,提高解决实际问题的能力。
二、实验环境本次实验在 Windows 10 操作系统环境下进行,使用了 Visual Studio 2019 作为编程工具,并借助了相关的操作系统模拟软件和调试工具。
三、实验内容与步骤(一)进程管理实验1、创建多个进程使用 C++语言编写程序,通过调用系统函数创建多个进程。
观察每个进程的运行状态和资源占用情况。
2、进程同步与互斥设计一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。
分析在不同并发情况下程序的执行结果,理解进程同步的重要性。
(二)内存管理实验1、内存分配与回收实现一个简单的内存分配算法,如首次适应算法、最佳适应算法或最坏适应算法。
模拟内存的分配和回收过程,观察内存的使用情况和碎片产生的情况。
2、虚拟内存管理了解 Windows 操作系统的虚拟内存机制,通过查看系统性能监视器观察虚拟内存的使用情况。
编写程序来模拟虚拟内存的页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法等。
(三)文件系统实验1、文件操作使用 C++语言对文件进行创建、读写、删除等操作。
观察文件在磁盘上的存储方式和文件目录的结构。
2、文件系统性能测试对不同大小和类型的文件进行读写操作,测量文件系统的读写性能。
分析影响文件系统性能的因素,如磁盘碎片、缓存机制等。
四、实验结果与分析(一)进程管理实验结果1、创建多个进程在创建多个进程的实验中,通过任务管理器可以观察到每个进程都有独立的进程 ID、CPU 使用率、内存占用等信息。
多个进程可以并发执行,提高了系统的资源利用率。
2、进程同步与互斥在生产者消费者问题的实验中,当使用正确的信号量机制时,生产者和消费者能够协调工作,不会出现数据不一致或死锁的情况。
文件管理实验报告
文件管理实验报告文件管理实验报告一、引言文件管理是计算机科学中一个重要的领域,它涉及到对文件的创建、存储、检索和删除等操作。
在这个实验中,我们将通过模拟文件管理系统来了解文件管理的基本原理和技术。
二、实验目的本实验的主要目的是通过设计和实现一个简单的文件管理系统,加深对文件管理的理解,并掌握文件的创建、读写、删除等基本操作。
三、实验过程1. 文件的创建在文件管理系统中,文件的创建是一个重要的操作。
我们首先需要确定文件的名称和文件的类型。
在实验中,我们选择了一个文本文件作为示例。
通过调用系统提供的文件创建函数,我们可以在指定的目录下创建一个新的文本文件。
2. 文件的读写文件的读写是文件管理的核心操作之一。
在实验中,我们使用了C语言的文件读写函数来实现对文件的读写操作。
首先,我们需要打开文件,然后可以使用读取函数来读取文件中的内容,或者使用写入函数来向文件中写入内容。
最后,我们需要关闭文件,以确保文件的完整性和安全性。
3. 文件的删除文件的删除是一个常见的操作。
在实验中,我们通过调用系统提供的文件删除函数来删除指定的文件。
在删除文件之前,我们需要确保文件已经关闭,并且没有其他进程正在使用该文件。
通过删除文件,我们可以释放磁盘空间,并且保持文件系统的整洁。
四、实验结果通过实验,我们成功地创建了一个简单的文件管理系统,并实现了文件的创建、读写和删除等基本操作。
我们可以通过系统提供的命令来查看文件的属性和内容,以及进行其他操作。
五、实验总结通过这次实验,我们深入了解了文件管理的原理和技术。
文件管理是计算机科学中一个重要的领域,它涉及到对文件的创建、存储、检索和删除等操作。
掌握文件管理的基本原理和技术对于我们理解计算机系统的运行机制和提高工作效率都具有重要意义。
在实验中,我们通过设计和实现一个简单的文件管理系统,加深了对文件管理的理解,并掌握了文件的创建、读写、删除等基本操作。
通过实验结果的验证,我们证明了文件管理系统的可行性和有效性。
操作系统试验模拟文件管理系统.doc
操作系统试验模拟文件管理系统.doc.【实验报告正文】一、实验目的和要求(必填)实验目的:通过在VC 平台下编程,设计和调试一个简单的文件系统,通过模拟文件操作命令的执行,来模拟文件系统对文件及目录的管理。
实验要求:两名学生成组结对完成实验,仿真出文件系统中对文件和目录的操作。
二、实验内容(必填)文件管理:实现一个简单的文件系统三、实验原理或实验方法(必填)装原理:通过结构体来描述文件和目录,利用链表知识实现目录树结构,通过对链表的操作实现整个文件系统中目录和文件的相关操作。
订方法:学生两人结对进行实验,分别实现对文件和目录的操作。
线对文件的操作包括:创建文件create、读文件read、写文件write 、删除文件 delete。
对目录的操作包括:创建目录mkdir 、切换目录 cd、展示目录内容 dir 、删除目录 rm。
四、主要仪器设备或实验条件Windows 操作系统, VC 开发环境五、实验步骤(含实验数据记录处理)或操作设计过程记录#include "stdio.h"#include "iostream.h"#include "string.h"#define FILENAME_LENGTH 10 //文件名称长度#define COMMAND_LENGTH 10// 命令行长度#define PATH_LENGTH 30//参数长度struct filenode{char filename[FILENAME_LENGTH];int isdir;char content[255];filenode *parent;filenode *child;filenode *prev;filenode *next;};filenode *initnode(char filename[],int isdir);void createroot();int run();int findpath(char *topath);void help();int mkdir();int create();int read();int write();int del();int rm();int cd();int dir();filenode *root,*recent,*temp,*ttemp,*temp_child;charpath[PATH_LENGTH],command[COMMAND_LENGTH],temppath[PATH_LENGTH],rece ntpath[PATH_LENGTH];//创建文件或目录的存储节点filenode* initnode(char filename[],int isdir){filenode *node=new filenode;strcpy(node->filename,filename);node->isdir=isdir;node->parent=NULL;node->child=NULL;node->prev=NULL;node->next=NULL;return node;}//初始化文件系统根结点void createroot (){recent=root=initnode("/",1);root->parent=NULL;root->child=NULL;root->prev=root->next=NULL;strcpy(path,"/");}void help(){cout<<endl;< bdsfid="140" p=""></endl;<>cout<<"create:建立文件。
实验三 文件系统空闲空间管理模拟
实验三文件系统空闲空间管理模拟一、实验内容及要求要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程;二、基本原理用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0表示空闲,1表示分配;当请求分配一个磁盘块时,寻找到数组中为0的位,计算相对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并将其状态由0变到1。
当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1变为0。
三、实验步骤1. 输入已知参数:磁盘柱面数m, 每柱面磁道数p, 每磁道物理块数q, 计算位示图大小;假设采用整数数组,则数组大小为:Size= (柱面数*每柱面磁道数*每磁道物理块数)/ sizeof(int) +12. 申请大小为size的整数数组map,并对其进行随机初始化。
例如:假设m=2, p=4, q=8, 共有64个磁盘块,若sizeof(int)=16, 则位示图大小为4,map[4]如下:位示图中每一位对应的相对磁盘块号如下图,磁盘块号由小到大对应于数组的低地址到高地址位上。
即map[0]的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map[1]的第0位到第15位对应16号磁盘块到31号磁盘块的状态,以此类推。
如上表所示,29号磁盘的状态存在map[1]中,对应于第13位, 第一行表示位号。
3. 根据位示图中为1的位信息,生成一张已分配磁盘块表。
如:map[0]的第1位为1,则i=0,j=1, 其对应的相对块号block为1, 柱面号为0,磁道号为,物理块号为1计算公式如下:(1)已知位示图中的下标i , j, 计算相对块号Block= i*sizeof( int )+j(2)已知相对块号计算柱面、磁道、物理块号如下:柱面号C= 相对块号/(每柱面磁道数*每磁道物理块数)磁道号H= 相对块号%(每柱面磁道数*每磁道物理块数)/ 每磁道物理块数物理块号R= 相对块号%每磁道物理块数4. 提出申请磁盘块或释放磁盘块的要求,根据要求完成操作。
模拟文件管理系统
操作系统课程设计项目三实验报告姓名:学号:学院:专业:指导教师:2014 年 *月 * 日项目三:文件系统一、教学内容模拟文件管理。
设计并调试一个简单的文件系统,模拟文件操作命令的执行。
深入了解主要文件操作命令的执行过程,掌握它们的基本实施方法。
1.实现文件系统的基本功能●设计一个支持n个用户的文件系统,每个用户可拥有多个文件。
●采用二级或二级以上的多级文件目录管理。
●对文件设置存取控制保护方式,如“只能执行”、“允许读”、“允许写”等。
●系统的外部特征应接近于真实系统,可以设置下述文件操作命令:建立文件、打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。
●通过键盘使用该文件系统,系统应当显示操作命令的执行结果。
二、源程序与注释#include <stdio.h>//#include<string.h>#include<windows.h>#include<sys/stat.h>//文件属性#include <io.h>//文件常用库#include<direct.h>//创建删除目录void mean(){printf("\t\t**********文件管理系统************\n");printf("\t\t 1.创建目录\n");printf("\t\t 2.删除目录\n");printf("\t\t 3.创建文件\n");printf("\t\t 4.设置权限\n");printf("\t\t 5.写入文件\n");printf("\t\t 6.读取文件\n");printf("\t\t 7.删除文件\n");printf("\t\t 8.复制文件\n");printf("\t\t 9.打开文件\n");printf("\t\t 10.退出\n");printf("\t\t**********************************\n");}void createcatalog(){int a;char name[10],choice;label:printf("请输入路径和目录名字例:C:/a\n");scanf("%s",name);getchar();a=mkdir(name);if(a==-1){printf("文件夹名相同\n");printf("重新输入?(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;}else{printf("目录创建成功");printf("\n");}}void deletecatalog(){int a;char name[10],choice;label:printf("请输入要删除的目录路径和名字例:C:/a\n");scanf("%s",name);getchar();a=rmdir(name);if(a==-1){printf("目录不存在\n");printf("重新输入?(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;}else{printf("目录删除成功");printf("\n");}}void createfile(){int a;char name[10],choice;label: printf("请输入文件路径和名字");scanf("%s",name);getchar();//a=mkdir(name);a=creat(name,S_IWRITE);if(a==-1){printf("文件名相同\n");printf("重新输入?(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;}else{printf("文件创建成功");printf("\n");}}/*void openfile(){FILE *fp;char name[10];printf("请输入要打开的文件路径和名字");scanf("%s",name);getchar();if((fp=fopen(name,"r"))==NULL){printf("文件不存在\n");return;}elseprintf("打开文件成功\n");}*/void readfile(){char ch,name[10];FILE *fp;printf("请输入要读的文件路径和名字");scanf("%s",name);getchar();if((fp=fopen(name,"r"))==NULL){printf("文件不存在");return;}//openfile();ch=fgetc(fp);if(ch==EOF){printf("文本内容为空\n");}else{while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf("\n");fclose(fp);}}void deletefile(){FILE *fp;int a;char name[10],choice;label:printf("请输入要删除的文件路径和名字");scanf("%s",name);getchar();fp=fopen(name,"r");a=access(name,0);//获取文件状态if(a!=0){printf("文件不存在");printf("重新输入?(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;}else{a=access(name,02);//#define W_OK 2if(a!=0){printf("文件为只读文件");}else{fclose(fp);unlink(name);//删除一个文件,若成功则返回0,否则返回-1printf("删除文件成功\n");}}}void writefile(){FILE *fp;char ch,name[10],choice;label:printf("请输入文件路径和名字");scanf("%s",name);getchar();if((fp=fopen(name,"w"))==NULL){printf("文件不存在或只能读");printf("重新输入?(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;elsereturn;}//ch=getchar();printf("请输入文件内容,#结束");ch=getchar();while(ch!='#'){fputc(ch,fp);//putchar(ch);ch=getchar();}printf("文件内容输入成功\n");getchar();fclose(fp);}/*void copyfile() //复制文件操作{char name[20],name1[20],name2[20];printf("请输入被复制的文件名");scanf("%s",name);getchar();printf("请输入复制后的文件名");scanf("%s",name1);getchar();strcpy(name2,"copy ");//windowsstrcat(name2,name);strcat(name2," ");strcat(name2,name1);system(name2); //系统调用dos指令getchar();} */void copyfile(){FILE *fp=NULL;FILE *fp2=NULL;int a;char ch,name[50],name2[50],choice;printf("请输入要被复制的文件路径和名字");scanf("%s",name);label:printf("请输入新文件路径和名字");scanf("%s",name2);getchar();a=creat(name2,0);chmod(name2,S_IWRITE);if(a==-1){printf("文件夹名相同\n");printf("重新输入?(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;}fp=fopen(name,"r");//puts(name);puts(name2);if(fp)printf("....dddd");fp2=fopen(name2,"w");//printf("ll");if(fp2==0)printf("....");ch=fgetc(fp);//printf("kkk");while(ch!=EOF){//putchar(ch);fputc(ch,fp2);ch=fgetc(fp);}printf("复制文件成功");fclose(fp);fclose(fp2);printf("\n");}void modifyfile() /*修改文件权限*/{int a,x;char name[10],choice;label:printf("请输入要修改权限的文件名");scanf("%s",name);getchar();a=access(name,0);//获取文件的状态if(a!=0){printf("文件不存在\n");printf("重新输入?(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;}else{printf("请选择:1--只读2--可写\n");while(1){scanf("%d",&x);if(x==1||x==2)break;elseprintf("输入错误!请重新选择");}if(x==1){a=chmod(name,S_IREAD);/*修改文件为"只读"*/printf("已经使<%s>只读\n",name);getchar();}elseif(x==2) /*修改文件为"只写"*/{a=chmod(name,S_IWRITE);printf("已经使<%s>可写\n",name);getchar();}}}void openfile(){int a;char name[10],name2[10],choice;label:printf("请输入要显示的目录");scanf("%s",name);/*显示目录操作*/getchar();a=access(name,0);if(a!=0){printf("目录不存在");printf("重新输入(Y/N)");scanf("%c",&choice);getchar();if(choice=='Y'||choice=='y')goto label;}else{printf("文件打开成功,文件信息如下:\n");strcpy(name2,"dir ");/*复制dir命令*/strcat(name2, name);printf("%s",name2);system(name2);/*系统调用*/}}void main(){label:mean();int i;printf("请选择:");scanf("%d",&i);switch(i){case 1:system("cls");createcatalog();break;//创建文件目录case 2:system("cls");deletecatalog();break;//删除文件目录case 3:system("cls");createfile();break;//创建文件case 4:system("cls");modifyfile();break;//修改文件权限case 5:system("cls");writefile();break;//写文件case 6:system("cls");readfile();break;//读文件case 7:system("cls");deletefile();break;//删除文件case 8:system("cls");copyfile();break;//复制文件case 9:system("cls");openfile();break;case 10:exit(0);//关闭文件// case 12:system("cls");openfile();break;//打开文件}printf("按任意键返回菜单");getchar();system("cls");goto label;}三、流程图四、运行截图1.显示介面2.输入选项:1 创建目录3.输入选项:2 删除目录4.输入选项:3 创建文件5.输入选项:4 设置权限6.输入选项:5 写入文件7.输入选项:6读取文件8.输入选项:7 复制文件9.输入选项:8 打开文件五、主要实践教学条件●IBM 586以上微型计算机及其兼容机。
实验三 文件管理
实验三文件管理【实验目的】通过调试并运行一个简单的文件系统来模拟文件操作命令的执行、模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。
【实验要求】了解该系统的文件管理方案、数据结构、文件目录的建立与删除;理解系统在运行过程中显示的状态和有关参数变化情况的意义。
具体要求为:(1)了解一个支持n 个用户的文件系统,每个用户可拥有多个文件。
(2)理解二级和多级文件目录管理。
(3)了解文件存取控制保护方式。
(4)了解常见的文件操作命令。
【实验环境】具备Windows或MS-DOS操作系统、带有Turbo Pascal 集成环境的PC机。
【实验重点及难点】重点:理解文件管理的基本概念,文件管理中主要数据结构的设计和文件管理中文件、目录的建立和删除等算法的实现。
难点:实验程序的问题描述、实现算法、数据结构。
【实验内容】一.阅读实验程序文件管理模拟程序代码见【实验例程】。
二.编译实验例程用Turbo Pascal 编译实验例程。
三.运行程序并对照实验源程序阅读理解实验中输入、输出的意义。
【实验例程】program filesystem;uses crt;const openf:integer=0;type str=string[6];linku=^datau; {FCB文件控制块}datau=recordfilename:str;pcode:integer;length:integer;addr:integer; {第一个物理块的地址}next:linku; {下一个FCB地址}end;linkm=^datam;datam=record {用户控制块}username:str; {用户名}link:linku; {指向用户第一个的FCB}end;linka=^dataa; {具体存放文件内容}dataa=recordfilename:str;pcode:integer;rpointer:integer;wpointer:integer;addr:integer;next:linka;end;varmfd :array[1..5] of linkm; {存放用户信息的用户控制块指针,最多可以存放5个用户} p1,q1:linkm; {用户控制块指针}p2,q2:linku; {文件控制块指针}afd,p3,q3:linka; {具体存放文件内容指针}x,y1:str;i,y,j:integer;f:boolean;code:integer;procedure init;label a,c;beginclrscr;for i:=1 to 10 do writeln;writeln('':25,'WELCOME TO OUR FILE SYSTEM !');writeln;writeln;writeln('':27,'Please press space bar !');repeat until readkey=' ';clrscr;a:write('User number ?'); {输入用户数量,要求用户数量<5}readln(y1);val(y1,y,code);If code<>0 then goto a;if y>5 thenbeginwriteln('Users too many ! (<=5)'); goto a;end;writeln('Begin users login:');for i:=1 to y do {建立用户主目录}beginc:write('User name',i,'?');readln(x);for j:=1 to i-1 dobeginif x=mfd[j]^.username then {输入的用户名与已有的用户重名,就重输}beginwriteln('Users has existed');goto c;end;end;new(mfd[i]); {建立一个用户控制块}mfd[i]^.username:=x;new(p2); {建立一个文件控制块}p2^.next:=NIL; p2^.filename:=' ';mfd[i]^.link:=p2; {将第一个文件控制块挂到用户控制块的link去}end;if y<5 then {将空闲的用户控制指针置空}for i:=y+1 to 5 domfd[i]:=NIL;new(afd); {建立一个文件内容记录}afd^.next:=NIL;afd^.filename:=' ';end;procedure pcreate;label a,b;beginwrite('User name?');readln(x);for i:=1 to 5 doif x=mfd[i]^.username then goto b;writeln(x,'not been logined !'); goto a;b:write('New file name?');readln(x);p2:=mfd[i]^.link;if p2^. filename=x then {检查是否与用户的第一个文件重名} beginwriteln('File has existed!');goto b;end;while p2^.next<>NIL {检查是否与用另外的文件重名}dobeginp2:=p2^.next;if p2^.filename=x thenbegingoto b;end;end;new(q2);q2^.next:=NIL;q2^.filename:=' ';p2^.next:=q2;p2^.filename:=x;repeat write('Protection code?');readln(y1);val(y1,y,code);until code=0;p2^.pcode:=y;p2^.length:=0;writeln('Create finished !');a:end;procedure popen;label a,b;beginwrite('Filename?');readln(x);for i:=1 to 5 dobeginp2:=mfd[i]^.link;while(x<>p2^.filename) and (p2^.next<>NIL)do p2:=p2^.next;if x=p2^.filename then goto a;end;writeln('The file not been created !');goto b;a:if openf<5 thenbeginopenf:=openf+1;q3:=afd;while q3^.next<>nil do q3:=q3^.next;new(p3);q3^.next:=nil;q3^.next:=p3;q3^.filename:=x;q3^.pcode:=p2^.pcode;q3^.rpointer:=0;q3^.wpointer:=0;writeln('Open finished !');endb:end;procedure close1 (t:integer);beginwrite('Filename?');readln(x);q3:=afd;i:=1;while(q3^.filename<>x) and (q3^.next<>nil) dobeginp3:=q3;q3:=q3^.next;end;i:=i+1;if q3^.filename=x thenbeginif q3=afd thenafd:=q3^.nextelsep3^.next:=q3^.next;openf:=openf-1;dispose(q3);if t=0 then writeln('Close finished !');endelse if t=0 thenwriteln('The file not been opened !');end;procedure pcolse;const t:integer=0;beginclose1(t);end;procedure pdelete;const t:integer=1;label a,b;beginclose1(t);for i:=1 to 5 dobeginp2:=mfd[i]^.link;while(x<>p2^.filename) and (p2^.next<>nil) dobeginq2:=p2;p2:=p2^.next;end;if p2^.filename=x then goto a;end;writeln('The file not exist ! 1');goto a;a:if p2=mfd[i]^.link then mfd[i]^.link:=p2^.nextelse q2^.next:=p2^.next;dispose(p2);writeln('Delete finished !');b:end;procedure pread;beginwrite('The procedure has not exist !');end;procedure pwrite;beginwriteln('The procedure has not exist !');end;procedure pdirectory;label a,b;var c:char;j,n:integer;beginwrite('Main or user directory ? (m/u)');readln(c);if c='m' thenbeginwriteln('Main File Directory');writeln('---------------------------------------');writeln(' user_name file_number ');j:=0; n:=0;for i:=1 to 5 dobeginif mfd[i]=nil then goto b;write( mfd[i]^.username);p2:=mfd[i]^.link;while p2^.next<>nil dobeginj:=j+1;p2:=p2^.next;end;n:=n+j; writeln(' ':14,j);j:=0;end;b:writeln('total','':10,n)endelsebeginwrite('User name ?');readln(x);for i:=1 to 5 dobeginif mfd[i]^.username=x thenbeginwriteln('',x,'file directory');writeln('-------------------------------------------');writeln('Filename protection code length');p2:=mfd[i]^.link;while p2^.next<>nil dobeginwriteln(' ',p2^.filename,' ':9,p2^.pcode,' ':13,p2^.length);p2:=p2^.next;end;goto a;end;end;writeln('The directory not exist !');end;a:end;begininit;f:=true;while f dobeginrepeatwriteln;writeln;writeln('':27,'main menu');writeln('':15,'------------------------------------------------------------');writeln('':15,'| |');writeln('':15,'| 1. create 2. open 3. close |');writeln('':15,'| |');writeln('':15,'| 4. delete 5. read 6. write |');writeln('':15,'| |');writeln('':15,'| 7. driectory 8. quit |');writeln('':15,'| |');writeln('':15,'-----------------------------------------------------------');write('':17,'Which ?');readln(y1);val(y1,y,code);until code=0;case y of1:pcreate;2:popen;3:pcolse;4:pdelete;5:pread;6:pwrite;7:pdirectory;8:halt;end;end;end.【问题与讨论】1、该文件模拟系统目录结构的特点?2、该文件模拟系统支持几个用户?3、主文件目录、用户文件目录、活动文件目录的目录项有哪些?4、设置数据域pcode的目的是什么?请说明如何发挥它的作用?5、描述文件管理主控程序的算法(流程图或N-S图)。
模拟文件管理系统3
模拟文件管理系统3模拟文件管理系统报告模拟文件管理系统操作系统课程设计总结汇报计科31第二组模拟文件管理系统报告设计目的通过模拟操作系统中的文件管理系统,更好的理解掌握常用OS的重要部分:文件管理。
归纳学习方法和思考方法,做到理论联系实际,培养分析问题、解决问题和具备较强的软件设计能力和较严密的思维能力模拟文件管理系统报告方法树的保存文件查找(树的查找) 模拟文件存储模拟文件管理系统报告工作总结通过这次实验,我们组的同学学到了很多系统知识,培养了团队协作、克服困难的精神。
提高了能力。
模拟文件管理系统报告演示界面模拟文件管理系统报告模拟文件管理系统报告模拟文件管理系统报告特色及创新目录的保存与读取:把目录树转化为二叉树,并将这个二叉树保存到磁盘,下次从磁盘读出并还原成目录树的结构。
文件查找:从目录树的根结点开始深度优先遍历这棵树,直到找到文件。
文件共享:用符号链实现多用户间的文件共享。
模拟文件管理系统报告存在问题由于树的保存结构的原因,查找算法的效率不高。
磁盘块的模拟是在内存中进行的。
模拟文件管理系统报告改进讨论尝试使用哈希表来查找文件,提高效率。
可以在磁盘创建一个文件来模拟磁盘。
模拟文件管理系统报告心得体会模拟文件管理系统报告邢自成:通过这次实验,充分体现了团队合作的精神,在互相帮助,互相学习的前提下我们基本完成了此次课程设计!在编写代码时,还是觉的学的知识不够深,还有就是知识不够多。
比如,关于MFC,就一点也不会,虽然学C++时老师讲过,也做过实验,但那时没认真学,后来自己又没学。
模拟文件管理系统报告叶林:这次的课程设计,我主要完成的是对目录的显示列出,改变当前的目录,这两小部分。
编写程序的过程还是遇到了不少困难,在小组其他成员的合作帮助下,最后还是完成了自己的任务。
通过这次课程设计,觉得自己有很多不足之处,编程能力还需在平时的练习中多提高,觉得自己对MFC的了解缺乏不少,以后会注意对这方面的学习。
文件管理虚伪实验报告
一、实验背景随着信息技术的飞速发展,文件管理在各类组织和个人中扮演着越来越重要的角色。
为了检验和提升学生对文件管理知识的掌握程度,我们设计了一项虚伪实验,旨在模拟真实场景,让学生在有限的时间内完成一系列文件管理任务。
本实验旨在检验学生对文件创建、修改、删除、备份等基本操作的熟练程度,以及在实际操作中遇到问题时的应变能力。
二、实验目的1. 培养学生对文件管理基本操作的熟练掌握;2. 锻炼学生在实际操作中解决问题的能力;3. 增强学生对文件管理重要性的认识。
三、实验内容1. 实验环境:Windows操作系统;2. 实验任务:(1)创建一个名为“实验文件夹”的文件夹;(2)在“实验文件夹”中创建以下文件:1)Word文档:实验报告.docx;2)Excel表格:实验数据.xlsx;3)PPT演示文稿:实验演示.pptx;(3)修改实验报告.docx文件内容,添加一段描述实验目的的文字;(4)删除实验数据.xlsx文件;(5)备份实验文件夹,将备份存放在E盘的“备份文件夹”中;(6)在备份文件夹中恢复实验数据.xlsx文件;(7)将实验演示.pptx文件重命名为“实验演示_修改版.pptx”。
四、实验步骤1. 打开Windows资源管理器,在桌面空白处右击,选择“新建”->“文件夹”,命名为“实验文件夹”;2. 在“实验文件夹”中,依次创建实验报告.docx、实验数据.xlsx和实验演示.pptx文件;3. 双击打开实验报告.docx文件,添加一段描述实验目的的文字,并保存;4. 右击实验数据.xlsx文件,选择“删除”,确认删除;5. 在E盘创建一个名为“备份文件夹”的文件夹,将实验文件夹复制到备份文件夹中;6. 在备份文件夹中找到实验数据.xlsx文件,右击选择“还原”,将文件恢复到原位置;7. 右击实验演示.pptx文件,选择“重命名”,命名为“实验演示_修改版.pptx”。
五、实验结果与分析1. 实验过程中,大部分学生能够顺利完成实验任务,熟练掌握文件创建、修改、删除、备份等基本操作;2. 部分学生在备份和恢复文件过程中出现错误,需要教师指导和帮助;3. 通过实验,学生认识到文件管理的重要性,提高了对文件管理知识的重视程度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三文件管理模拟文件存储空间管理1.内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。
2.思想:文件存储空间管理是文件系统的重要内容。
常用的管理思想有空白文件目录法、空白块链法和位示图法。
本实验采用前两种方法进行空间分配。
(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。
当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。
为此需建立两张表格,分别记录相关数据。
序号首空白块号空白快个数物理块号备注1 0 100 0,1,2,……,98,99空白文件目录表(初始)序号首空白块号空白块个数物理块号标志1 2 4 2,3,4,5 未分配2 93 9,10,11 未分配3 25 5 25,26,27,28,29 未分配4 39 2 39,40 未分配5 ………………未分配空白文件目录(中间)文件标识首块号文件块个数状态备注beta 0 2 占用Alpha 6 3 占用Toyota 12 13 占用Sony 30 9 占用Ford 50 4 占用……………………已使用区域表(中间)上述两张表的数据在系统运行中是发生变化的。
文件空闲区分配和释放算法如下图所示:图一文件空闲区分配算法图二文件空闲区回收算法(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。
文件标识首块号备注beta 0Alpha 6Toyota 12Sony 30Ford 50…………4.书写实验报告:数据结构:使用了链表作为数据结构,创建一条有一百个节点的链表,链表中定义了文件的名称,标识符等等信息,在添加文件或者删除文件时只需要对其中的标识进行操作就可以达到模拟文件增删的目的。
源代码:#include<stdio.h>#include<string.h>#include<malloc.h>#include<windows.h>#define LEN sizeof(black)typedef struct _black{char name[10];int flag;char flag1[10];struct _black *next;}black;black *create(){black *head = NULL;black *p1,*p2;int i;p1 = p2 = (black *)malloc(LEN);for(i = 0;i<100;i++){if(head == NULL){p1->flag = 0;strcpy(p1->name,"");head = p1;head->next = NULL;}else{p1->flag = 0;strcpy(p1->name,"");p2->next = p1;p2 = p1;}p1 = (black *)malloc(LEN);}p2->next = NULL;free(p1);p1 = NULL;return head;}void showList(black *head){black *p = head;int i = 0,j = 0;int count = 1;printf("序号\t首空白块号\t空白块个数\t物理块号\t标志\n");while (p != NULL){j++;if(p->flag == 0){i++;}if(p->flag == 0 && p->next == NULL){printf("%d\t %d\t %d\t %d到%d\t 未分配\n",count,j-i,i,j-i,j-1);count++;i = 0;}else if(p->flag == 0&&p->next->flag == 1){printf("%d\t %d\t %d\t %d到%d\t 未分配\n",count,j-i,i,j-i,j-1);count++;i = 0;}p = p->next;}printf("\n");p = head;i = j = 0;printf("文件\t首块号\t 文件块个数\t物理块号\t备注\n");while (p != NULL){j++;if(p->flag == 1){i++;}if(p->flag == 1 && p->next == NULL){printf("%s\t %d\t %d\t %d 到%d\t %s\n",p->name,j-i,i,j-i,j-1,p->flag1);i = 0;}else if(p->flag == 1 && strcmp(p->name,p->next->name) != 0){printf("%s\t %d\t %d\t %d 到%d\t %s\n",p->name,j-i,i,j-i,j-1,p->flag1);i = 0;}p = p->next;}printf("\n");}black *add(black *head,int strat,int end,char name[10]){black *p = head;int i = 0,j = 0;int m = 0,n = 0;if(strat>end){printf("文件添加失败!\n");return head;}for(m = 0;m<strat;m++){p = p->next;}for(m = strat;m<=end;m++){if(p->flag == 1){printf("文件添加失败!空间已经被占用!\n");return head;}p = p->next;}p = head;m = n = 0;while (p != NULL){if(i >= strat){strcpy(p->name,name);p->flag = 1;strcpy(p->flag1,"占用");}if(j == end){break;}i++;j++;p = p->next;}printf("添加成功!\n");return head;}black *dele(black *head,int strat,int end){black *p = head;int i = 0,j = 0;if(strat>end){printf("文件删除失败!\n");return head;}for(i = 0;i<strat;i++){p = p->next;}for(i = strat;i<end;i++){if(p->flag == 0){j++;}p = p->next;}if(j == end - strat){printf("文件删除失败!空间未被占用,无文件!\n");return head;}p = head;i = j = 0;while (p != NULL){if(i >= strat){p->flag = 0;strcpy(p->name,"");strcpy(p->flag1,"未占用");}if(j == end){break;}i++;j++;p = p->next;}printf("删除成功!\n");return head;}void output(){printf("请选择操作:");printf("添加文件(1):");printf("删除文件(2):");}black *junge(black *head,int chose){switch (chose){case 1:{int strat,end;char name[10] = "";fflush(stdin);printf("请输入文件名:");gets(name);fflush(stdin);printf("请输入文件首尾块号:");scanf("%d%d",&strat,&end);head = add(head,strat,end,name);}break;case 2:{int strat,end;fflush(stdin);printf("请输入文件首尾块号:");scanf("%d%d",&strat,&end);head = dele(head,strat,end);}break;default:break;}return head;}int main(){black *head = NULL;int chose;head = create();while (1){showList(head);output();fflush(stdin);scanf("%d",&chose);head = junge(head,chose);}return 0;}。