操作系统实验五-文件系统

合集下载

文件管理实验报告

文件管理实验报告

文件管理实验报告一、实验目的文件管理是操作系统的重要组成部分,本次实验的目的在于深入理解文件管理的基本概念和原理,掌握文件的存储、组织、检索和访问等操作,熟悉常见的文件系统结构和功能,提高对文件管理系统的实际操作能力和问题解决能力。

二、实验环境1、操作系统:Windows 102、开发工具:Microsoft Visual Studio 2019三、实验内容1、文件的创建、删除和重命名使用 C++或 Python 编程语言,通过系统调用或相关库函数实现文件的创建、删除和重命名操作。

观察文件在操作系统中的实际表现,如文件的出现和消失,文件名的更改等。

2、文件的读写操作实现对文本文件和二进制文件的读写操作,包括读取文件的全部内容、按行读取文件、向文件写入数据等。

分析不同读写模式(如只读、只写、读写等)对文件操作的影响。

3、文件属性的获取和修改获取文件的基本属性,如文件大小、创建时间、修改时间、访问权限等。

尝试修改文件的部分属性,如只读属性、隐藏属性等,观察修改后的效果。

4、文件目录的操作创建、删除和遍历目录。

实现文件在不同目录之间的移动和复制操作。

四、实验步骤1、文件的创建、删除和重命名以下是使用 Python 实现文件创建、删除和重命名的示例代码:```pythonimport os创建文件file_path ="exampletxt"with open(file_path, 'w') as f:fwrite("This is a test file")删除文件osremove(file_path)重命名文件new_file_path ="renamed_exampletxt"osrename(file_path, new_file_path)```运行代码后,可以在指定的目录中观察到文件的创建、删除和重命名操作的结果。

2、文件的读写操作读取文本文件的示例代码:```pythonfile_path ="text_filetxt"with open(file_path, 'r') as f:content = fread()print(content)```按行读取文本文件的示例代码:```pythonfile_path ="text_filetxt"with open(file_path, 'r') as f:for line in f:print(linestrip())```写入数据到文件的示例代码:```pythonfile_path ="outputtxt"with open(file_path, 'w') as f:fwrite("New data written to file")```分别运行上述代码,观察文件的读写结果。

操作系统文件管理系统模拟实验

操作系统文件管理系统模拟实验

操作系统文件管理系统模拟实验在计算机科学中,操作系统是一种系统软件,负责管理计算机硬件和软件资源,并为用户和应用程序提供接口。

文件管理系统是操作系统的一个重要组成部分,它负责管理计算机系统中的文件和目录,以及提供对它们的访问和操作。

本次实验旨在模拟操作系统中文件管理系统的基本功能和操作。

我们将使用一个虚拟的文件系统,通过命令行界面来模拟用户与文件系统的交互。

以下是实验的具体内容和步骤:1. 创建虚拟文件系统首先,我们需要创建一个虚拟的文件系统。

文件系统由文件和目录组成,可以通过树状结构来表示。

我们可以使用一个数据结构来模拟文件系统的存储和管理。

2. 初始化文件系统在开始操作文件系统之前,我们需要初始化文件系统。

这包括创建根目录和设置当前目录为根目录。

3. 文件和目录的创建与删除文件和目录是文件系统的基本单位。

我们可以通过命令来创建和删除文件和目录。

例如,使用"mkdir"命令创建一个目录,使用"touch"命令创建一个空文件,使用"rm"命令删除文件或目录。

4. 文件和目录的访问权限文件和目录可以设置不同的访问权限,以保护文件系统的安全性。

我们可以使用"chmod"命令来修改文件或目录的权限。

权限通常包括读、写和执行权限。

5. 文件和目录的重命名和移动我们可以使用"mv"命令来重命名文件或目录,使用"cp"命令来复制文件或目录,使用"mv"命令来移动文件或目录。

6. 文件和目录的查找和显示我们可以使用"ls"命令来显示当前目录下的文件和目录,使用"cd"命令来切换当前目录,使用"pwd"命令来显示当前目录的路径。

此外,我们还可以使用"find"命令来查找文件或目录。

7. 文件和目录的读写操作文件可以被读取和写入。

linux的文件系统、目录结构、文件管理实验报告

linux的文件系统、目录结构、文件管理实验报告

linux的文件系统、目录结构、文件管理实验报告Linux是一款使用广泛的操作系统,具有丰富的文件系统、目录结构、文件管理系统。

以下是Linux文件系统实验报告。

一、文件系统文件系统是指计算机操作系统用来管理文件和数据存储空间的一种机制。

Linux系统使用的是可扩展的第二代文件系统(ext2、ext3、ext4),它支持更大的文件和更大的分区,并使用了更高效的索引和更快的文件系统检查。

二、目录结构Linux目录结构是一个统一的层次结构,它将计算机的所有文件都组织到一个合理的层次结构中。

以下是Linux常见的目录结构:1. /(根目录):根目录是文件系统的根节点,所有文件和目录都以它为起点。

2. /bin:包含一些最基本的系统工具,比如ls、cp、mv等常用命令。

3. /dev:包含系统设备文件。

4. /etc:包含系统中的配置文件和脚本文件。

5. /home:用于存储用户的个人文件和数据。

6. /lib:包含了系统中使用的一些共享库文件。

7. /mnt:用于挂载外部设备,比如USB、CD-ROM等。

8. /opt:用于存放第三方软件的安装文件和数据。

9. /proc:该目录是一个虚拟目录,它不占用实际存储空间,但可以查看和修改系统的运行状态。

10. /root:超级用户的家目录。

11. /sbin:包含一些管理系统的系统管理员使用的工具。

12. /tmp:用于存放临时文件和目录。

13. /usr:用于存放非本地(不是系统)用户的应用程序和数据。

14. /var:用于存放可变的数据,比如日志文件。

三、文件管理文件管理是指对计算机文件进行操作,如创建、复制、粘贴、移动和删除等。

下面是Linux 文件管理的一些常见命令:1. ls:列出目录中的文件和子目录。

2. cd:切换目录。

3. mkdir:创建一个新目录。

4. touch:创建一个新文件。

5. cp:复制文件或目录。

6. mv:移动或重命名文件。

操作系统课程设计-一个简单的文件系统的详细设计

操作系统课程设计-一个简单的文件系统的详细设计

计算机系课程设计实验报告课程名称操作系统课程设计实验学期 2012 至 2013 学年第 1 学期学生所在系部计算机与信息管理系年级 2010 专业班级计算机001班学生姓名学号任课教师实验成绩计算机系制一个简单的文件系统的详细设计一、实验目的(1)阅读并调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

(2)了解设计一个n个用户的文件系统,每个用户可以保存M个文件。

用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。

二、实验要求1、阅读所给文件系统源程序,并加注释(注释量达60%),2、修改、完善该系统,画出所设计的文件系统的详细流程图。

三、文件系统功能设计1. 功能设计该文件系统是一个多用户、多任务的文件系统。

对用户和用户的文件数目并没有上限。

也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制。

该系统可以支持的操作命令如下:①bye——用户注销命令。

当使用该命令时,用户退出系统,注销该用户功能设计并回到登陆界面。

命令格式:bye②close——删除用户注册信息命令。

执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除。

命令执行完成后返回登陆界面。

命令格式:close③create——在当前目录下创建一个文件,且该文件不能跟当前已有的文件重名。

该文件的管理信息登记在用户文件信息管理模块中。

执行完该命令后回到执行命令行。

命令格式:create>file1其中:“>”符为提示符,file1为要创建的文件名。

④delete——删除当前用户目录下的一个文件,命令执行完毕返回至命令行。

命令格式:delete>file1其中:file1为要删除的文件名。

⑤list——显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。

《操作系统》课内实验报告

《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。

实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。

三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。

在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。

2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。

在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。

3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。

在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。

4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。

在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。

四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。

(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。

(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。

文件管理实验报告

文件管理实验报告

一、实验目的1. 理解文件管理的概念和基本原理。

2. 掌握文件系统的结构及其组成。

3. 学会使用文件管理系统进行文件操作。

4. 了解文件系统的性能优化方法。

二、实验环境1. 操作系统:Windows 102. 文件管理系统:Windows Explorer3. 实验工具:文本编辑器(如Notepad)三、实验内容1. 文件系统的基本概念2. 文件系统的结构3. 文件操作4. 文件系统性能优化四、实验步骤1. 文件系统的基本概念(1)打开Windows Explorer,观察文件系统的组织结构。

(2)分析文件系统的组成,包括文件、目录、驱动器等。

(3)了解文件名、扩展名、路径等基本概念。

2. 文件系统的结构(1)创建一个新文件夹,命名为“实验文件夹”。

(2)在“实验文件夹”中创建一个文本文件,命名为“实验报告.txt”。

(3)观察文件系统的树状结构,理解目录与文件之间的关系。

3. 文件操作(1)打开“实验报告.txt”,使用文本编辑器进行编辑。

(2)保存并关闭编辑器。

(3)将“实验报告.txt”复制到“实验文件夹”的子目录中。

(4)删除“实验文件夹”中的“实验报告.txt”。

(5)重命名“实验文件夹”中的子目录。

4. 文件系统性能优化(1)查看磁盘属性,了解磁盘空间占用情况。

(2)对磁盘进行碎片整理。

(3)使用磁盘清理工具清理磁盘中的临时文件。

五、实验结果与分析1. 文件系统的基本概念通过实验,我们了解了文件系统的基本概念,包括文件、目录、驱动器等。

文件系统是操作系统管理文件的一种数据结构,用于存储、检索、更新和删除文件。

2. 文件系统的结构实验中,我们创建了文件夹和文件,并观察了文件系统的树状结构。

文件系统采用分层结构,目录与文件之间通过路径连接。

3. 文件操作实验中,我们进行了文件操作,包括创建、编辑、复制、删除和重命名。

这些操作是文件管理的基本技能。

4. 文件系统性能优化通过磁盘碎片整理和清理磁盘中的临时文件,我们提高了文件系统的性能。

操作系统实验报告文件管理

操作系统实验报告文件管理

操作系统实验报告文件管理文件管理是操作系统的重要功能之一,它负责对计算机系统中的文件进行组织、存储和访问。

文件管理系统的设计和实现对操作系统的性能和可靠性起着重要作用。

本文将介绍文件管理的基本概念、文件系统的组织方式和文件的操作方法。

一、文件管理的概念文件是计算机系统中存储和管理数据的基本单位,它可以是文本、图像、音频、视频等各种类型的数据。

文件管理的目标是实现对文件的有效组织和高效访问,使得用户和应用程序可以方便地读取、写入和删除文件。

文件管理系统主要包括以下几个方面:1.文件组织方式:文件可以按照不同的方式进行组织,包括顺序文件、索引文件、哈希文件等。

不同的组织方式有不同的优势和适用场景,可以根据实际需要选择合适的组织方式。

2.文件存储管理:文件在存储设备上的存储方式包括连续存储、链式存储和索引存储等。

不同的存储方式对文件的读写性能和空间利用率有影响,需要根据实际情况进行选择。

3.文件访问控制:对文件的访问需要进行权限控制,保证只有合法的用户或应用程序可以读取和写入文件。

文件访问控制主要通过访问权限和文件属性来实现。

二、文件系统的组织方式1.单级目录结构:这是最简单的文件系统组织方式,所有文件都位于同一个目录下。

由于没有目录的嵌套结构,文件的查找和管理比较简单,但是对于大量文件的管理不够灵活。

2.层次目录结构:该方式通过目录的嵌套结构来组织文件,可以形成一棵树状结构。

目录可以包含子目录和文件,用户可以通过目录路径来访问文件。

这种组织方式可以更好地组织大量的文件,提高文件的查找效率。

3.索引目录结构:该方式使用一个索引表来记录文件的位置和属性信息,用户通过索引表中的索引来访问文件。

索引表可以根据文件名、文件类型等信息快速定位到文件的位置,提高访问效率。

此外,索引表还可以支持对文件的动态增删改查操作。

三、文件的操作方法1.创建文件:文件的创建是指在文件系统中创建一个新文件,并为其分配存储空间。

创建文件时需要指定文件名和文件类型,并根据需要为文件设置访问权限和属性。

操作系统教学实践(3篇)

操作系统教学实践(3篇)

第1篇一、引言操作系统是计算机科学与技术领域的重要基础课程,它涉及计算机系统的资源管理、进程管理、存储管理、文件系统等多个方面。

为了提高学生对操作系统的理解和掌握程度,本文将从教学实践的角度,探讨如何进行操作系统教学。

二、教学目标1. 使学生掌握操作系统的基本概念、原理和关键技术;2. 培养学生分析和解决实际问题的能力;3. 增强学生的团队协作和创新能力;4. 提高学生的编程能力和动手能力。

三、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、分类和特点;2. 进程管理:讲解进程的概念、进程状态、进程调度算法和进程同步与互斥;3. 存储管理:分析内存分配策略、页面置换算法和虚拟内存技术;4. 文件系统:探讨文件系统的概念、目录结构、文件操作和存储设备管理;5. 设备管理:介绍设备的分类、驱动程序、I/O控制方式和中断处理;6. 网络操作系统:讲解网络操作系统的基本概念、网络协议、网络设备管理和网络安全。

四、教学实践1. 案例教学:通过实际案例,引导学生分析操作系统的原理和应用。

例如,以Linux系统为例,讲解进程调度、内存管理和文件系统等知识点。

2. 实验教学:设计实验项目,让学生动手实践操作系统的相关知识。

实验项目包括:(1)进程调度实验:让学生编写进程调度算法,实现进程的创建、调度和同步。

(2)内存管理实验:让学生实现内存分配、页面置换和虚拟内存等技术。

(3)文件系统实验:让学生实现文件系统的目录结构、文件操作和存储设备管理。

(4)设备管理实验:让学生编写设备驱动程序,实现设备的控制和管理。

3. 项目教学:以实际项目为背景,让学生分组完成项目开发。

项目可以包括:(1)操作系统模拟器:让学生模拟操作系统的运行过程,加深对操作系统原理的理解。

(2)嵌入式操作系统开发:让学生了解嵌入式操作系统的特点,掌握嵌入式开发技能。

(3)分布式操作系统开发:让学生了解分布式系统的原理,掌握分布式操作系统的开发方法。

操作系统文件管理实验报告

操作系统文件管理实验报告

操作系统文件管理实验报告操作系统文件管理实验报告1:引言本实验报告旨在详细描述操作系统文件管理实验的设计、实施和结果。

文件管理是操作系统的重要组成部分,负责对计算机中的文件进行组织、存储和访问。

本实验通过模拟文件管理的过程,加深对文件管理的理解和实践。

2:实验目的本实验的主要目的是:- 理解文件系统的概念和原理- 掌握文件的创建、读取、写入和删除等基本操作- 实施并测试文件的分配和回收算法- 评估不同的文件分配算法对系统性能的影响3:实验环境本实验的实施环境如下:- 操作系统:Windows 10- 开发环境:C++ 编程语言4:实验内容4.1 文件系统设计在文件系统设计中,首先确定文件的基本单位,例如块或扇区。

然后,定义文件控制块(FCB)结构,用于存储文件的元数据信息,如文件名、大小、创建时间、权限等。

接下来,设计文件分配表,记录系统中每个块的使用情况,用于实现文件的分配和回收。

4.2 文件的创建和删除在文件的创建过程中,首先为文件分配空间,并更新文件分配表。

然后,创建文件的FCB,并将其到目录项中。

在文件的删除过程中,首先释放文件的空间,并更新文件分配表。

然后,删除文件的FCB,并从目录项中移除。

4.3 文件的读写操作文件的读写操作是用户对文件进行读取和修改的过程。

在文件读取操作中,首先找到要读取的文件的FCB,获取文件的起始块地址,并从起始块中读取数据。

在文件写入操作中,首先找到要写入的文件的FCB,获取文件的起始块地址,并将数据写入起始块。

若文件大小超过起始块的容量,则按照一定的分配算法继续分配空间。

4.4 文件分配算法文件分配算法决定了操作系统如何管理文件的空间分配。

常用的文件分配算法包括顺序分配、分配和索引分配。

顺序分配将文件连续地存储在磁盘上,易于实现但可能产生外部碎片。

分配使用链表结构将文件存储在磁盘的不连续块中,不易产生外部碎片但可能引起存取时间增长。

索引分配使用索引表将文件存储在磁盘的不连续块中,不易产生外部碎片且存取时间相对较短,但索引表本身需要占用存储空间。

操作系统虚拟文件系统实验报告

操作系统虚拟文件系统实验报告

操作系统虚拟文件系统实验报告一、实验目的本实验旨在帮助学生理解操作系统中虚拟文件系统的概念和工作原理,通过实际操作来深入学习和掌握相关知识。

二、实验环境本次实验使用的操作系统为Linux,实验工具为虚拟机软件VMware Workstation。

三、实验步骤1. 创建虚拟机:首先启动VMware Workstation,创建一个新的虚拟机并安装Linux操作系统。

2. 挂载文件系统:在Linux系统中,使用命令行工具挂载一个文件系统到指定的目录,例如将/dev/sdb1挂载到/mnt目录下。

3. 创建文件:在挂载后的文件系统中,通过命令行工具创建若干个文件和目录,可以使用touch和mkdir命令。

4. 编辑文件内容:使用vim或者其他文本编辑工具,在创建的文件中添加一些内容。

5. 查看文件系统信息:使用df命令查看当前系统的文件系统使用情况,通过ls命令查看文件和目录的信息。

6. 卸载文件系统:使用umount命令卸载之前挂载的文件系统。

7. 实验总结:对本次实验的操作过程和结果进行总结,思考在实际应用中虚拟文件系统的意义和作用。

四、实验结果分析通过本次实验,我深入理解了操作系统中虚拟文件系统的概念和原理。

在实际操作过程中,我掌握了如何挂载和卸载文件系统,创建和编辑文件内容,以及查看文件系统信息的方法。

这些基本操作对于日常的系统管理和开发工作具有重要意义,能够有效地提高工作效率和便捷性。

五、实验感想本次实验虽然只是简单的操作演示,但对我理解操作系统的文件系统和虚拟化技术有着重要的意义。

通过亲身操作,我对虚拟文件系统的工作原理有了更加直观的认识,对操作系统中文件管理的流程和方式也有了更深入的理解。

这对我今后的学习和工作都具有积极的促进作用,我会继续学习和提升相关知识和技能,努力成为一名优秀的操作系统工程师。

六、实验总结通过本次操作系统虚拟文件系统的实验,我进一步巩固了相关知识,增强了对操作系统的理解和掌握。

实训5 文件系统的管理

实训5 文件系统的管理

实训五文件系统的管理一、目的:1、掌握文件系统的安装与卸装;2、熟悉Linux支持FAT文件系统;3、了解文件系统的维护;二、内容:1、U盘、光驱的挂载与卸载;2、Linux中浏览Windows的FAT32文件系统;3、磁盘管理的几个命令操作。

三、准备工作准备一个U盘;若电脑上安装有光驱,准备一张光盘。

四、操作1、U盘的挂载与卸载①将U盘插入计算机的USB端口;②点击:“主菜单| 系统工具| 硬件浏览器”;③查看硬盘下的设备名,U盘或移动硬盘的设备名一般为:/dev/sda1;④在子目录“/mnt”下创建挂载点“/u ”,即“/mnt/u”;⑤进行终端命令方式,输入命令:# mount -t vfat /dev/sda1 /mnt/u# cd /mnt/u# ls –l &&查看U盘中的文档。

也以通过GUI方式进行浏览查看U盘上的文档。

⑥当对U盘的操作结束后,要关闭浏览U盘的窗口或退出挂载点的目录;⑦在终端命令方式,输入命令:# umount /dev/sda1 或# umount /mnt/u⑧取下U盘。

2、挂载与卸载文件系统的GUI操作①点击:“主菜单/系统工具/磁盘管理”②查看可挂载和卸载的文件系统,若有光驱或软盘可以作挂载和卸载操作注意,挂载这些设备时桌面上会多了相应的设备图标并可以进行操作。

3、linux中浏览Windows的FAT32文件系统操作:①点击:“主菜单/系统工具/硬件浏览器”(system/Hardware Browser。

)②查看“硬件设备”(Harddisk Device)中类型是FAT的文件系统,选择一个设备,填写其/dev/________。

(比如:/dev/hda3)③进入终端方式(Terminal)。

④ mkdir /mnt/dosfat ←┘ &&在/mnt目录下建立一个子目录windows⑤ mount –t vfat /dev/______ /mnt/windows←┘将FAT32的文件系统安装到/mnt/windows子目录中。

2023年最新的操作系统文件管理实验报告三篇

2023年最新的操作系统文件管理实验报告三篇

2023年最新的操作系统文件管理实验报告三篇操作系统文件管理实验报告一篇一、实训主要内容Word排版,表格制作与编辑。

Powerpoint的制作,初步认识计算机办公应用OFFICE。

二、实训过程第一天:初步熟悉计算机的性能和认识Word;第二天:练习Word题;第三天:认识Powerpoint并对昨天的Word练习予以测试;Excel实训作业第四天:将Word表格与Powerpoint的制作熟悉巩固;第五天:老师再次对我们Word与Powerpoint测验以及教我们一些有用的技能与方法,初步认识计算机办公应用。

OFFICE。

三、实训心得体会很快的,一个假期又过来了,面对本学期最后一次的校园生活实训,想着刚刚过去的最后一个周,紧张沉默之后更多的是感慨,印在脑海里的每一个足迹都是那么的深,真的说不出是什么感觉,伴着时间,就像是在和自己的影子赛跑,不可能从真实的两面去看清它,只是经意不经意的感受着有种东西在过去,也许更适合的只有那句话:时不待我,怎可驻足一周,短短的一周,我学到了很多不知道的东西,实在是感受颇深。

当今企业竞争范围的伴随社会市场经济的发展以及信息化程度的不断提高而日益扩大,这样就要求企业在各个方面加强管理,要求企业有更高的信息化集成来实现对企业的整体资源进行集成管理。

现代企业都意识到,企业之间的竞争是综合实力的竞争,要求企业有更强的资金实力,具备强有力的管理能力和更快的市场响应速度。

因此,引入计算机系统的意义是非常重大的。

在社会主义市场经济高速发展的今天,如果计算机的各项管理运做仍然停滞在以纸、笔为主要工具的阶段,就会因为信息量的快速增长而无法迅速、准确的运用计算机完成各项工作,这样,必将成为企业各方面发展的一个瓶颈。

而在当代这个以信息时代为主题的社会里,计算机技术高速发展,将信息技术应用于对现代企业的管理日益普及。

计算机技术不但可以提高信息的处理速度和提高信息处理的准确性,更重要的是,可以进一步的解放劳动力,将他们分配到更需要人力资源的岗位上去,从而加快社会工作的现代化、综合化的发展步伐。

操作系统虚拟文件系统实验报告

操作系统虚拟文件系统实验报告

操作系统虚拟文件系统实验报告1. 引言本报告旨在总结并分析我们小组在操作系统虚拟文件系统实验中的经验和发现。

操作系统是计算机系统中非常重要的一个组成部分,负责管理计算机硬件和软件资源。

而虚拟文件系统(Virtual File System,VFS)则是操作系统中一个关键的抽象层,为用户和应用程序提供了统一的文件操作接口。

通过对虚拟文件系统的实验,我们深入了解了操作系统的内部实现原理,加深了对文件系统的理解。

2. 实验目的本次实验的主要目的是对操作系统的虚拟文件系统进行实践探索,通过实际操作和观察,加深对虚拟文件系统的理解,并熟悉常见的文件系统操作。

3. 实验环境我们使用了一台以Linux操作系统为基础的计算机作为实验平台,并采用虚拟机技术搭建了多个虚拟机实例,以便进行并行的多任务操作。

4. 实验过程与结果4.1 文件系统的创建与挂载首先,我们使用命令行工具创建了一个新的文件系统,并将其挂载到操作系统的指定目录上。

通过这一步骤,我们成功地在操作系统上创建了一个虚拟的文件系统,并使其能够被操作系统识别并访问。

4.2 文件的创建、读取和写入在实验过程中,我们创建了多个文件,并测试了文件的读取和写入功能。

我们发现,在虚拟文件系统下,文件的读取和写入操作是非常高效和稳定的。

通过在文件中写入不同类型的数据并进行读取,我们验证了文件系统的正确性和可靠性。

4.3 目录的创建和遍历除了文件操作外,我们还对虚拟文件系统中的目录进行了创建和遍历实验。

通过创建多层次的目录结构并遍历其中的所有文件和子目录,我们验证了虚拟文件系统对目录的管理和访问功能。

4.4 文件系统的扩展与压缩为了进一步探索虚拟文件系统的性能和可扩展性,我们对文件系统进行了动态扩展和压缩实验。

通过添加和删除大量文件,我们观察到文件系统的性能表现良好,并且在文件数量不断增加的情况下能够有效地管理和访问这些文件。

5. 实验总结与思考通过本次虚拟文件系统的实验,我们对操作系统的底层实现原理有了更深入的了解。

《操作系统》课程实验报告

《操作系统》课程实验报告

《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。

二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。

同时,实现进程的正常终止和异常终止,并分析其对系统的影响。

2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。

通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。

(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。

观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。

2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。

(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。

观察文件在磁盘上的存储方式和文件系统的目录结构。

2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。

四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。

(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。

(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。

2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。

(2)创建多个进程,模拟对共享资源的并发访问。

(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。

(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。

操作系统原理_实验报告

操作系统原理_实验报告

一、实验目的1. 理解操作系统基本原理,包括进程管理、内存管理、文件系统等。

2. 掌握操作系统的基本命令和操作方法。

3. 通过实验加深对操作系统原理的理解和掌握。

二、实验环境1. 操作系统:Linux2. 编程语言:C语言3. 开发工具:Eclipse三、实验内容本次实验主要分为以下几个部分:1. 进程管理实验2. 内存管理实验3. 文件系统实验四、实验步骤及结果1. 进程管理实验实验步骤:- 使用C语言编写一个简单的进程管理程序,实现进程的创建、调度、同步和通信等功能。

- 编写代码实现进程的创建,通过调用系统调用创建新的进程。

- 实现进程的调度,采用轮转法进行进程调度。

- 实现进程同步,使用信号量实现进程的互斥和同步。

- 实现进程通信,使用管道实现进程间的通信。

实验结果:- 成功创建多个进程,并实现了进程的调度。

- 实现了进程的互斥和同步,保证了进程的正确执行。

- 实现了进程间的通信,提高了进程的效率。

2. 内存管理实验实验步骤:- 使用C语言编写一个简单的内存管理程序,实现内存的分配、释放和回收等功能。

- 实现内存的分配,采用分页存储管理方式。

- 实现内存的释放,通过调用系统调用释放已分配的内存。

- 实现内存的回收,回收未被使用的内存。

实验结果:- 成功实现了内存的分配、释放和回收。

- 内存分配效率较高,回收内存时能保证内存的连续性。

3. 文件系统实验实验步骤:- 使用C语言编写一个简单的文件系统程序,实现文件的创建、删除、读写等功能。

- 实现文件的创建,通过调用系统调用创建新的文件。

- 实现文件的删除,通过调用系统调用删除文件。

- 实现文件的读写,通过调用系统调用读取和写入文件。

实验结果:- 成功实现了文件的创建、删除、读写等功能。

- 文件读写效率较高,保证了数据的正确性。

五、实验总结通过本次实验,我对操作系统原理有了更深入的理解和掌握。

以下是我对实验的几点总结:1. 操作系统是计算机系统的核心,负责管理和控制计算机资源,提高计算机系统的效率。

操作系统实验报告java

操作系统实验报告java

操作系统实验报告java实验报告:操作系统实验一、实验目的本次实验旨在通过使用Java语言编写一个简单的操作系统,加深对操作系统原理的理解,掌握操作系统底层的相关知识。

二、实验环境1.Java编程环境:JDK 82.开发工具:Eclipse IDE3.操作系统:Windows 10三、实验内容1.实验背景介绍在本章节中,我们将介绍操作系统的基本概念、功能以及其在计算机系统中的作用。

2.实验设计与实现本章节将详细描述操作系统实现的设计思路和具体的实现过程,包括创建进程、调度算法、内存管理、文件系统等。

2.1 创建进程在本节中,我们将介绍如何使用Java语言创建一个进程,并实现进程的并发执行。

2.2 调度算法本节将讨论操作系统中的调度算法,例如先来先服务、短作业优先、时间片轮转等,并给出具体的实现代码。

2.3 内存管理在本节中,我们将介绍操作系统的内存管理机制,包括分区分配、动态存储分配等,并给出相关的实现方法。

2.4 文件系统本节将详细介绍操作系统中的文件系统的设计和实现,包括文件的存储、目录管理、文件访问控制等。

四、实验结果与分析1.实验结果展示在本章节中,我们将展示实验的运行结果,并对实验结果进行详细的分析和解释。

2.实验评估与讨论本节将对实验结果进行评估和讨论,包括对实验系统性能的评估以及可能存在的问题和改进方向的讨论。

五、实验总结本次实验通过使用Java语言编写一个简单的操作系统,使我们更深入地了解了操作系统的原理和实现,掌握了操作系统底层的相关知识。

六、附件本文档涉及的附件包括实验代码和相关实验结果的截图。

附件一:源代码文件(OS.java)附件二:实验结果截图(result.png)七、法律名词及注释1.操作系统:操作系统是一种控制和管理计算机硬件与软件资源的程序。

2.进程:进程是计算机中正在运行的一个程序实例,它具有独立的内存空间和系统资源。

3.调度算法:调度算法是操作系统中用于决定进程执行顺序的一种算法,目的是合理利用系统资源,提高系统性能。

操作系统实验5文件系统:Linux文件管理

操作系统实验5文件系统:Linux文件管理

(1)掌握Linux 提供的文件系统调用的使用方法;
(2)熟悉文件和目录操作的系统调用用户接口;
(3)了解操作系统文件系统的工作原理和工作方式。

(1) 利用Linux 有关系统调用函数编写一个文件工具filetools,要求具有下列功能:***********
0. 退出
1. 创建新文件
2. 写文件
3. 读文件
4. 复制文件
5. 修改文件权限
6. 查看文件权限
7. 创建子目录
8. 删除子目录
9. 改变当前目录到指定目录
10. 链接操作
通过这次实验掌握Linux 提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。

《操作系统》实验教学大纲

《操作系统》实验教学大纲

《操作系统》实验教学大纲实验名称:操作系统实验实验课程:计算机科学与技术、软件工程、电子信息工程实验学时:24学时(12次课程实验)实验目的:1.通过操作系统实验,学生将深入了解操作系统的原理和设计。

2.学生将掌握操作系统的基本概念和常用技术。

3.提高学生的实践能力和创新能力,培养学生的团队合作精神。

实验内容:1.实验一:操作系统基本概念-实验介绍:了解操作系统的基本概念和基本功能。

-实验要求:学生通过阅读文献或参考书籍,掌握操作系统的基本概念。

-实验过程:学生通过讨论或小组讨论的方式,给出操作系统的定义和基本功能列表。

2.实验二:进程管理-实验介绍:通过实验来学习进程管理的基本概念和常用算法。

-实验要求:学生通过自己编写程序,实现进程的创建、销毁和调度。

-实验过程:学生根据给定的问题,设计进程模型并实现相应的程序。

3.实验三:内存管理-实验介绍:了解内存管理的基本概念和常用算法,学习虚拟内存技术的原理。

-实验要求:学生通过编写程序,实现内存分配和回收的算法。

-实验过程:学生通过模拟内存分配和回收的过程,理解内存管理的基本原理。

4.实验四:文件系统-实验介绍:了解文件系统的基本概念和常用算法,学习文件管理的基本原理。

-实验要求:学生通过编写程序,实现文件的创建、删除和查找。

-实验过程:学生通过模拟文件的创建、删除和查找的过程,理解文件管理的基本原理。

5.实验五:设备管理-实验介绍:通过实验学习设备管理的基本概念和常用算法,了解设备驱动程序的实现原理。

-实验要求:学生通过编写程序,模拟设备的控制和管理。

-实验过程:学生通过模拟设备的请求、分配和释放的过程,理解设备管理的基本原理。

6.实验六:作业调度-实验介绍:通过实验学习作业调度的基本概念和常用算法。

-实验要求:学生通过编写程序,实现作业的调度。

-实验过程:学生通过输入作业和作业调度算法,模拟作业调度的过程。

实验评定:-实验报告:60%-实验成果:20%-实验操作:20%实验环境:- 操作系统:Linux、Windows实验要求:-学生需认真完成实验任务,编写实验报告。

操作系统原理实验

操作系统原理实验

操作系统原理实验操作系统是计算机系统中最核心的部分之一,它负责管理和控制计算机的硬件和软件资源,为用户提供一个良好的工作环境。

操作系统原理实验是计算机相关专业的学生必修课程之一,通过实验学习,可以更深入地理解操作系统的原理和工作机制,提高对操作系统的理解和应用能力。

实验一,进程管理。

进程是操作系统中最基本的概念之一,它是程序执行的基本单位。

在进程管理实验中,我们可以学习到进程的创建、调度、同步和通信等内容。

通过编写程序模拟进程的创建和调度过程,可以更直观地理解操作系统是如何管理进程的。

实验二,内存管理。

内存管理是操作系统中的重要内容之一,它负责管理计算机的内存资源,包括内存的分配与回收、内存的保护和共享等。

在内存管理实验中,我们可以学习到内存分配算法、地址转换技术以及虚拟内存的实现原理。

通过编写程序模拟内存分配和回收的过程,可以更好地理解操作系统是如何管理内存的。

实验三,文件系统。

文件系统是操作系统中负责管理存储设备上的文件和目录的部分,它提供了对文件的读写和管理功能。

在文件系统实验中,我们可以学习到文件的组织结构、文件的存储管理和文件的访问控制等内容。

通过编写程序模拟文件的创建、读写和删除过程,可以更深入地理解操作系统是如何管理文件系统的。

实验四,设备管理。

设备管理是操作系统中负责管理计算机硬件设备的部分,它包括对设备的初始化、分配和释放等功能。

在设备管理实验中,我们可以学习到设备的管理方法、设备的中断处理和设备的驱动程序设计等内容。

通过编写程序模拟设备的初始化和中断处理过程,可以更好地理解操作系统是如何管理设备的。

总结。

通过操作系统原理实验的学习,我们可以更深入地理解操作系统的原理和工作机制,提高对操作系统的理解和应用能力。

同时,实验还可以培养我们的动手能力和解决问题的能力,为今后从事计算机相关工作打下坚实的基础。

希望大家能够认真对待操作系统原理实验,取得更好的学习成绩,为将来的发展打下坚实的基础。

《操作系统》课程综合性的实验报告

《操作系统》课程综合性的实验报告

《操作系统》课程综合性的实验报告一、实验目的本次《操作系统》课程的综合性实验旨在通过实际操作和实践,深入理解操作系统的基本原理、功能和运行机制。

具体目标包括熟悉操作系统的进程管理、内存管理、文件系统管理以及设备管理等核心模块,提高对操作系统的整体认知和应用能力。

二、实验环境本次实验在以下环境中进行:操作系统:Windows 10 专业版开发工具:Visual Studio 2019编程语言:C++三、实验内容及步骤(一)进程管理实验1、创建多个进程使用 C++中的多线程库,创建多个进程,并观察它们的并发执行情况。

通过设置不同的优先级和资源需求,研究进程调度算法对系统性能的影响。

2、进程同步与互斥实现生产者消费者问题,使用信号量、互斥锁等机制来保证进程之间的同步和互斥。

观察在不同并发情况下,数据的正确性和系统的稳定性。

(二)内存管理实验1、内存分配与回收模拟内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。

通过随机生成内存请求,观察不同算法下内存的利用率和碎片情况。

2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小和页表结构,观察页面置换算法(如 FIFO、LRU 等)对内存访问性能的影响。

(三)文件系统管理实验1、文件操作创建、读取、写入和删除文件,了解文件系统的基本操作和数据结构。

2、文件目录管理实现文件目录的创建、遍历和搜索功能,研究目录结构对文件访问效率的影响。

(四)设备管理实验1、设备驱动程序模拟编写简单的设备驱动程序,模拟设备的输入输出操作,如键盘输入和屏幕输出。

2、设备分配与调度研究设备分配算法,如先来先服务和优先级算法,观察设备的使用情况和系统的响应时间。

四、实验结果与分析(一)进程管理实验结果分析1、在创建多个进程的实验中,发现高优先级进程能够更快地获得CPU 资源,系统响应时间更短。

但过度提高某些进程的优先级可能导致其他进程饥饿。

2、对于进程同步与互斥问题,正确使用信号量和互斥锁能够有效地保证数据的一致性和系统的稳定性。

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

计算机科学与技术学院2018-2019学年第一学期《操作系统》实验报告班级: XXXXXXX学号: XXXXXXXXX姓名: XXX教师: XXX成绩:1. 题目分析1.1 设计目的深入了解磁盘文件系统的实现。

1.2 设计内容(1)设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求实现:(2)支持多级目录结构,支持文件的绝对读路径;(3)文件的逻辑结构采用流式结构,物理结构采用链接结构中的显示链接方式;(4)采用文件分配表;(5)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件(追加方式)、关闭文件、改变文件属性。

(6)最后编写主函数对所做工作进行测试。

1.3 相关知识概述(1)文件的操作:①创建文件;②删除文件;③读文件;④写文件;⑤设置文件读/写位置。

(2)文件的逻辑结构:从用户的观点出发所能观察到的文件组织形式,即问价是由一系列的逻辑记录组成的,是用户可以直接处理的数据及其结构。

文件的物理结构:系统将文件存储在外存上所形成的一种存储组织形式,用户不可见。

(3)磁盘空间的管理:采取合理的文件分配方式,为每个文件分配必要的存储空间,使每个文件都能“各得其所”,并能有效减少磁盘碎片。

(4)磁盘目录结构2. 实验设计2.1基本设计思路用一个文件模拟磁盘:FAT 根目录目录1目录2目录3目录4…文件1文件2…文件分配表FAT(128B):第几项0 1 2 3 4 5 6 7 8 9 …内容-1 -1 -1 4 9 0 7 8 -1 12 …根目录(64B)目录1(64B)目录6(64B)目录……….实验中,模拟的磁盘有128块,每块64B,故文件分配表有128项,每项3一个字节,共占磁盘的前两块,盘块编号0、1;根目录紧邻在文件分配表后面,占编号为2的盘块。

8B8B8B8B8B8B8B8B文件管理系统要实现的功能包括:(1)磁盘操作:①磁盘分配(2)目录操作:①建立目录②显示目录内容③删除空目录(3)文件操作:①建立文件②打开文件③关闭文件④读文件⑤写文件⑥删除文件(磁盘回收)⑦显示文件内容⑧改变文件属性⑨使用绝对路径名查找文件(4)对数据结构——已打开文件表的操作:①在已打开文件表中查找某文件②将文件从已打开文件表中删除③将某文件插入已打开文件表2.2 主要数据结构描述1、每个目录项的数据结构(8B):typedef struct{char name[3]; // 文件/目录名char type[2]; //文件类型目录未使用字节(填充空格)int attribute;//属性int startnum; //起始盘块号int length;//文件长度目录未使用字节(填充0)}DF_item;2、已打开文件表项类型:typedef struct {char name[20]; //文件绝对路径名char attribute; //文件的属性,用1个字节表示,所以采用char类型int number; //文件起始盘块号int length; //文件长度,文件占用的字节数int flag; //操作类型,用“0”表示以读操作方式开文件,用“1”表示写操作方式打开文件pointer read; //读文件的位置,文件打开时dnum为文件起始盘块号,bnum为“0”pointer write; //写文件的位置,文件刚建立时dnum为文件起始盘块号,bnum 为“0”,打开文件时dnum和bnum为文件的末尾位置}OFILE;3、已打开文件登记表:struct{OFILE file[n]; //已打开文件登记表int length; //已打开文件登记表中登记的文件数量}openfile;2.3 主要算法描述(1)磁盘分配:(2)对已打开文件表的操作: ①在已打开文件表中查找某文件:开始找到文件分配表第 x 项, i=x第 i 项值是否为第 i 项是否为最后 一项?磁盘满,分配失败结束i=i+1分配第 i 块NYNY图 2-10 分配一个磁盘块的流程图②将某文件从已打开文件表中删除结束 查找路径名为 pname 的文件i=0i 为已打开文件 表一栏?查找成功 结束查找失败i=i+1文件路径名相符?NNYY开始删除路径名为 n ame 的文件 在已打开文件表中查找路径名为 n ame 的登记项i 找到该文件登记项?删除第 i 项:openfile.file[i]=openfile[openfile.length-1]openfile.length=openfile.length-1结束文件没有打开, 删除失败NY 图2-13 在已打开文件表中查找某文件图2-14 将某文件从已打开文件表中删除的流程图③将某文件插入已打开文件表(3)目录操作:①建立目录结束插入路径名为n ame 的文件在已打开文件表中查找路径名为n ame的登记项找到该文件登记项?已打开文件表已满?文件登记表满,无法打开文件结束在o penfile.file[length]处填写该文件的各项内容:openfile.length=openfile.length+1文件已打开YNYN图2-15将某文件插入已打开文件表的流程图②显示目录内容③删除空目录删除空目录首先要找到该目录,如果目录不存在,指令执行失败;如果存在,但是根目录或非空目录,显示不能删除,操作失败;若是非空子目录,则删除其目录项并回收对应空间。

删除空目录的过程和删除文件的过程相似,流程可参考文件的删除过程。

开始 显示路径名为 name 的目录 查找目录 n ame找到该目录?该目录项起始盘块 号 d num ;第 d num 块 内容读入 b uffer2指定目录不存在,显示目录 内容失败结束t=0查 b uffer2 中第 t 个目录项第 t 项是空目录项?显示该目录内容第 t 项是该盘块最后一项?结束t=t+1NYNYYN图 2-24 显示目录内容的流程图(4)文件操作:①建立文件②打开文件③关闭文件结束打开路径名为 p name 的文件查找文件的目录项找到该文件目录项文件属性与操作类型相符在已打开文件表中 插入该文件登记项结束文件不存在 ,无法打开文件操作不合法无法打开文件NYY N图 2-17 打开文件的流程图④读文件开始 关闭文件路径名为 name 的文件 查找已打开文件表文件打开? 追加文件结束符修改目录中文件长度 结束文件未打开, 无法关闭文件结束在已打开文件表中删 除该文件登记项操作为 “ 写 ” ?NNY Y图 2-20 模拟关闭文件的流程图⑤写文件开始读 n ame 文件 l ength 字节 查找已打开文件表文件打开文件以读方式打开从已打开文件表的到读指针 :将盘块 d um 读入缓冲b uffer1 文件未打开 , 无法读文件结束文件不能读结束t=0文件未结束且 t<=length显示读出内容; 修改读指针的 b unum: bnum=bnum+1t=t+1读完一个盘块修改读指针 bnum=0; :dnum= 文件分配表第 n um 项将盘块 d num 读入缓冲 b uffer1读文件结束 结束NYNNNYYY⑥删除文件(磁盘回收)⑦显示文件内容⑧改变文件属性改变文件属性,首先查找该文件,如果不存在,结束;如果存在,检査文件是否打开,打开不能改变属性;没有打开,根据要求改变目录项中属性值。

⑨使用绝对路径名查找文件结束 显示路径名为 name 的文件 查找目录 n ame找到该文件?文件打开?dnum= 该目录 起始盘块号第 d num 块是 该文件一块?第 d num 块内容读入 buffer1 显示 b uffer1 中的内 容结束或到文件结束符dnum=FAT 第d num 项 结束结束文件打开,显 示文件失败结束指定的文件不存在,显示文件内容失败NYNYNY3. 编码实现3.1 实现过程总结部分功能代码:(1)目录操作:①建立目录:int md(char *pathName, char *contentName, char address) //建立目录{int dnum;int bnum;int cbnum;int size = strlen(contentName);bool result = search_by_rname(pathName, 0, &dnum, &bnum, &cbnum);if (result == false){return 0; //返回值为0代表绝对路径输入有误,重新建立}content cn;int i = 0;for (i = 0; i < 3; i++){[i] = 255;}for (i = 0; i < size; i++) //为新建的name字段进行赋值{[i] = contentName[i];}[i] = '\0';cn.type[0] = ' ';cn.type[1] = ' ';cn.attribute = 8;cn.address = address;cn.length = ' ';int result1 = search(dnum);if (result1 == -1){return 2; //表示所选的父目录中没有空间}if (!isBlockEmpty(address)){return 3;}fseek(fc, address, SEEK_SET);unsigned char c1 = getc(fc);if (c1 == 254){return 4;}fseek(fc, dnum * 64 + result1, SEEK_SET);content c[1];c[0] = cn;fwrite(c, 8L, 1, fc);fseek(fc, (int)address, SEEK_SET);putc(255, fc);for (int i = 0; i < 8; i++){contentBuffer[i].name[0] = '$';}fseek(fc, address * 64, SEEK_SET);fwrite(contentBuffer, 64L, 1, fc);return 1; ///1代表创建目录}②显示目录内容:int dir(char *pathName){int dnum;int bnum;int cbnum;bool result =search_by_rname(pathName, 0, &dnum, &bnum, &cbnum);if (result == false){return 0; //路径查找失败}fseek(fc, dnum * 64, SEEK_SET);fread(contentBuffer, 64L, 1, fc);for (int i = 0; i < 8; i++){cout << "第" << i + 1 << "项的内容是:" << endl;if (contentBuffer[i].attribute == 8) //这是一个目录{cout << "名字:" << contentBuffer[i].name << endl;cout << "类型:空" << endl;cout << "属性:目录项" << endl;cout << "起始地址:" << (int)contentBuffer[i].address << endl;cout << "长度:1" << endl << endl;}else if (contentBuffer[i].name[0] == '$'){cout << "一个空的目录登记项" << endl;}else{cout << "名字:" << contentBuffer[i].name << endl;cout << "类型:" << contentBuffer[i].type << endl;if (contentBuffer[i].attribute == 3){cout << "属性:只读系统文件" << endl;}else{cout << "属性:可读可写的普通文件" << endl;}cout << "起始地址:" << (int)contentBuffer[i].address << endl;cout << "长度" << (int)contentBuffer[i].length << endl << endl;}}}(2)文件操作:①建立文件:bool create_file(){//让用户输入文件所在的绝对路径char absolutePath[20];getchar();cout << "请输入文件所在的绝对路径:";gets_s(absolutePath, 20);//检查目录是否存在int dnum;//该目录所在的磁盘盘块号int a;if (!search_by_rname(absolutePath, 1, &dnum, &a, &a)){cout << "路径不存在!" << endl;return false;}//检查该目录中是否有空余的登记项的位置int bnum = search1(dnum);if (bnum == -1){cout << "该路径下没有空余的登记项位置!" << endl;return false;}//让用户输入待建立文件的文件名char fileName[3];cout << "请输入文件名:";gets_s(fileName, 3);//检查文件名是否重名if (isRename(fileName, dnum) == false){cout << "文件名重名!" << endl;return false;}//输入文件属性cout << "请输入文件属性[A(只读文件) B(系统文件) C(只读系统文件) D(普通文件)]: "; char attributeByletter;cin >> attributeByletter;char attribute;switch (attributeByletter){case'A':attribute = 1;break;case'B':attribute = 2;break;case'C':attribute = 3;break;case'D':attribute = 4;break;default:cout << "没有该文件类型!" << endl;return false;}//让用户输入文件类型char type[3];cout << "请输入文件类型:";getchar();gets_s(type, 3);//在文件分配表中找一个空闲的盘块分配给该文件int freeDiskFileNum;if (findfree_FAT(&freeDiskFileNum) == false){cout << "磁盘空间已满!" << endl;return false;}fseek(fc, freeDiskFileNum, SEEK_SET);//将FAT对应位置填255表示该块被占用int useDisk = 255;fwrite(&useDisk, 1L, 1, fc);char star = '*';//将对应的盘块全部写星星fseek(fc, 64 * freeDiskFileNum, SEEK_SET);for (int i = 0; i < 64; i++){fwrite(&star, 1L, 1, fc);}//在该目录中添加该文件登记项content newitem;strcpy(, fileName);strcpy(newitem.type, type);newitem.attribute = attribute;newitem.address = freeDiskFileNum;newitem.length = 1;//刚创建时问价大小为满块64fseek(fc, dnum * 64 + bnum, SEEK_SET);fwrite(&newitem, 8L, 1, fc);}②打开文件:int open_file(char *pathName, int flag){int dnum; //下一跳的盘块号int bnum; //当前文件或者目录登记项所在的盘块号int cbnum; //当前登记项在当前盘块的偏移量bool result = search_by_rname(pathName, 1, &dnum, &bnum, &cbnum);if (result == false){return 0; //路径查找失败}OFILE cu;int i;for (i = 0; i < strlen(pathName); i++){[i] = pathName[i];}[i] = '\0';fseek(fc, bnum * 64 + cbnum, SEEK_SET);content temp[1];fread(temp, 8L, 1, fc);cu.attribute = temp[0].attribute;cu.number = temp->address;cu.length = temp->length;cu.flag = flag;pointer read, write;read.dnum = dnum;read.bnum = 0;write.dnum = dnum;write.bnum = 0;cu.write = write;cu.read = read;openfile.push_back(cu);return 3;}③关闭文件:int close_file(char *pathName){list<OFILE>::iterator it;int i = 0;for (it = openfile.begin(); it != openfile.end();) {if (strcmp(it->name, pathName) == 0){it = openfile.erase(it);return 1;}else{++it;}}return 0;}④读文件:bool read_file(char *pathName){int a;unsigned char c;bool flag = false;OFILE exist;list<OFILE>::iterator it;int i = 0;for (it = openfile.begin(); it != openfile.end(); it++){if (strcmp(it->name, pathName) == 0){exist = *it;flag = true;break;}}if (flag == false){return flag;}int dnumTemp = exist.read.dnum;fseek(fc, 64 * exist.read.dnum, SEEK_SET);for (i = 0; i < exist.length; i++){cout << "第" << exist.read.dnum << "个盘块内容如下:" << endl;while (exist.read.bnum<64){if (exist.read.bnum % 8 == 0){cout << endl;}c = getc(fc);a = c;cout << hex << " " << a;exist.read.bnum++;}exist.read.bnum = 0;fseek(fc, exist.read.dnum, SEEK_SET);c = getc(fc);if (c == 255){cout << "文件末尾" << endl;break;}exist.read.dnum = c;fseek(fc, exist.read.dnum * 64, SEEK_SET);cout << endl;}return flag;}⑤写文件:bool write_file(char *pathName){int dnum; //下一跳的盘块号int bnum; //当前文件或者目录登记项所在的盘块号int cbnum; //当前登记项在当前盘块的偏移量int a;unsigned char c;bool flag = false;OFILE exist;list<OFILE>::iterator it;int i = 0;for (it = openfile.begin(); it != openfile.end(); it++) {if (strcmp(it->name, pathName) == 0){exist = *it;flag = true;break;}}if (flag == false){return flag;}cout << "当前文件的内容为" << endl;read_file(pathName);int userDnum, userBnum;cout << "请输入要修改的文件位置:" << endl;cout << "输入盘块号:";cin >> userDnum;cout << "输入块内地址:";cin >> userBnum;string s;cout << "请输入要修改的内容:" << endl;cin >> s;int UserLength = s.size();fseek(fc, userDnum * 64 + userBnum, SEEK_SET);exist.write.dnum = userDnum;exist.write.bnum = userBnum;int newDisk;for (int i = 0; i < UserLength; i++){putc(s[i], fc);exist.write.bnum++;if (exist.write.bnum>63){fseek(fc, exist.write.dnum, SEEK_SET);if (i + 1 == UserLength){return flag;}else{c = getc(fc);cout << hex << (int)c << endl;if (c == 255){findfree_FAT(&newDisk);unsigned char newd = newDisk;getchar();fseek(fc, exist.write.dnum, SEEK_SET);int ascall = fputc(newd, fc);fseek(fc, 3, SEEK_SET);unsigned char check = getc(fc);exist.write.dnum = newDisk;search_by_rname(pathName, 1, &dnum, &bnum, &cbnum);fseek(fc, bnum * 64 + 7, SEEK_SET);putc(++exist.length, fc);}else{exist.write.dnum = c;}exist.write.bnum = 0;fseek(fc, exist.write.dnum * 64, SEEK_SET);}}}return flag;}⑥使用绝对路径名查找文件:bool search_by_rname(char *name, int flag, int *dnum, int *bnum, int *cbnum){int length = strlen(name);list<string> pathCollection;*dnum = -1;if (name[0] == '/'&&name[1] == '\0') //如果路径只有‘/’,说明是根目录。

相关文档
最新文档