文件系统实验报告

合集下载

文件管理系统实验报告

文件管理系统实验报告

一、实验目的本次实验旨在通过设计和实现一个简单的文件管理系统,加深对文件管理原理的理解,掌握文件系统的基本操作,包括文件的创建、删除、修改、查询等,并了解文件系统的目录结构和管理机制。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 实验时间:2023年10月25日三、实验内容1. 文件系统的目录结构设计2. 文件的基本操作实现3. 文件系统的存储管理4. 文件系统的安全机制四、实验步骤1. 目录结构设计根据文件系统的需求,设计以下目录结构:```根目录│├── 文件夹A│ ├── 文件1.txt│ └── 文件2.txt│├── 文件夹B│ └── 文件3.txt│└── 文件夹C```2. 文件的基本操作实现(1)文件创建```cppvoid CreateFile(const std::string& filePath, const std::string& content) {// 检查文件是否存在if (CheckFileExist(filePath)) {std::cout << "文件已存在!" << std::endl;return;}// 创建文件std::ofstream file(filePath);if (file.is_open()) {file << content;file.close();std::cout << "文件创建成功!" << std::endl;} else {std::cout << "文件创建失败!" << std::endl;}}```(2)文件删除```cppvoid DeleteFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl;return;}// 删除文件if (remove(filePath) == 0) {std::cout << "文件删除成功!" << std::endl;} else {std::cout << "文件删除失败!" << std::endl;}}```(3)文件修改```cppvoid ModifyFile(const std::string& filePath, const std::string& newContent) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 修改文件内容std::ofstream file(filePath, std::ios::trunc); if (file.is_open()) {file << newContent;file.close();std::cout << "文件修改成功!" << std::endl; } else {std::cout << "文件修改失败!" << std::endl; }}```(4)文件查询```cppvoid QueryFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 读取文件内容std::ifstream file(filePath);if (file.is_open()) {std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());std::cout << "文件内容:" << content << std::endl;file.close();} else {std::cout << "文件读取失败!" << std::endl;}}```3. 文件系统的存储管理文件系统采用磁盘文件作为存储介质,通过文件操作实现对文件的读写。

实验四 文件系统 实验报告

实验四 文件系统 实验报告

文件系统实验报告一、实验目的了解操作系统中文件系统的原理以及实现方法。

二、实验方法通过FAT12文件系统的解读,了解文件系统的原理和实现。

三、实验任务通过对FAT12文件系统的了解,编写程序,读取并列出一个虚拟软盘中文件信息(文件名、属性、修改时间等),以及读取其中的文件内容四、实验要点FAT12文件系统的了解,Linux系统下文件读写相关系统调用。

五、实验过程1. FAT12 文件系统分析簇是操作系统分配文件空间的基本单位,簇由若干个扇区组成。

在FAT12文件系统中,簇号的有效位是12位,所以这种文件系统就被称为FAT12。

FAT12其中,引导区中储存着一些基本的信息。

例如,0x0000000B和0x0000000C 两个字节保存着每个扇区的大小,0x0000000D保存着每个簇占用多少个扇区。

FAT区中储存着簇号。

在0x00000200开始的三个字节,分别储存设备类型标记(0xF0为软盘);第二个第三个字节均为0xFF,是FAT标识符。

在FAT12文件系统中,每个簇占用12位,即1.5个字节。

簇号与地址的对应关系如下表:然后对读出的两个字节进行位运算处理,得到下一簇的簇序号。

注意,这里同样需要对高低位进行处理,即使用位计算的方式提取相应的簇号信息。

根据上述的原理,可以得出一个函数,以一个簇号为参数,返回值为文件下一个簇号。

代码如下:int getNextClutserId(FILE *fp, short clusterId){unsigned short tmp, low = 0, high = 0;;int address = (clusterId * 3 / 2) + 0x0000200;fseek(fp, address, SEEK_SET);fread((void *)(&tmp), 1, sizeof(unsigned short), fp);low = ((tmp & 0xFFF0) >> 4);high = tmp & 0x0FFF;return (clusterId % 2 == 0 ? high : low);}其中,fp 是用于读取文件系统的文件流,clusterID是当前簇号,返回值是下一个簇号。

文件系统管理实训报告

文件系统管理实训报告

一、实训背景随着信息技术的飞速发展,文件系统作为存储和管理数据的核心,其性能、稳定性和安全性越来越受到重视。

为了提高我们对文件系统管理的理解和实践能力,我们进行了文件系统管理实训。

本次实训以Linux系统下的文件系统管理为主要内容,通过实际操作,加深对文件系统结构、命令、权限管理等方面的认识。

二、实训目标1. 掌握Linux文件系统的基本结构;2. 熟悉常用的文件系统管理命令;3. 理解文件权限和属性的概念;4. 学会文件系统备份与恢复;5. 提高文件系统的安全性和性能。

三、实训内容(一)文件系统结构Linux文件系统采用树状结构,以根目录“/”为起点,所有文件和目录都从根目录开始分层排列。

常见的文件系统结构包括:1. 根目录(/):包含系统中的所有目录和文件;2. 换行目录(/bin、/sbin、/usr):存放常用的系统命令和系统服务;3. 用户目录(/home):存放用户个人文件和目录;4. 临时目录(/tmp):存放临时文件和程序;5. 系统目录(/etc、/var、/opt):存放系统配置文件、日志文件和可选软件包。

(二)文件系统管理命令1. ls:列出目录内容;2. pwd:显示当前目录的绝对路径;3. cd:切换目录;4. mkdir:创建目录;5. rmdir:删除空目录;6. touch:创建空文件;7. rm:删除文件或目录;8. cp:复制文件或目录;9. mv:移动或重命名文件或目录;10. chmod:修改文件权限;11. chown:更改文件所有者;12. chgrp:更改文件所属组。

(三)文件权限和属性Linux文件权限分为三组:所有者、所属组和其他用户。

每组权限包括读(r)、写(w)和执行(x)三种。

通过chmod命令可以修改文件权限,例如:- chmod 755 filename:设置所有者有读、写、执行权限,所属组和其他用户有读、执行权限;- chmod u+x filename:给所有者添加执行权限;- chmod g-w filename:取消所属组的写权限。

文件服务实验报告(3篇)

文件服务实验报告(3篇)

第1篇实验名称:文件服务系统设计与实现实验目的:1. 了解文件服务的概念和基本原理。

2. 掌握文件系统的设计方法和实现技巧。

3. 熟悉文件操作的编程实践。

4. 提高团队协作和问题解决能力。

实验时间:2023年X月X日实验地点:实验室实验人员:XXX、XXX、XXX实验环境:1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse4. 文件系统:本地文件系统一、实验背景随着信息技术的飞速发展,文件服务在日常生活中扮演着越来越重要的角色。

文件服务是指通过网络将文件存储、管理和共享的服务,它为用户提供了一种方便、高效的数据存储和交换方式。

本实验旨在设计和实现一个简单的文件服务系统,实现对文件的创建、读取、写入和删除等基本操作。

二、实验内容1. 文件服务系统需求分析(1)功能需求- 文件创建:用户可以创建新的文件。

- 文件读取:用户可以读取指定文件的全部内容。

- 文件写入:用户可以写入指定文件的内容。

- 文件删除:用户可以删除指定文件。

(2)性能需求- 系统响应时间:在正常情况下,系统对用户请求的响应时间应小于2秒。

- 系统并发处理能力:系统应能够同时处理多个用户请求。

2. 文件服务系统设计(1)系统架构文件服务系统采用C/S(客户端/服务器)架构,客户端负责用户界面和与用户的交互,服务器负责文件存储和管理。

(2)模块划分- 客户端模块:实现用户界面和与用户的交互。

- 服务器模块:实现文件存储、管理和共享。

- 文件管理模块:负责文件的创建、读取、写入和删除等操作。

3. 文件服务系统实现(1)客户端实现客户端采用Java Swing框架实现,包括以下功能模块:- 登录模块:用户输入用户名和密码进行登录。

- 文件操作模块:实现文件创建、读取、写入和删除等操作。

(2)服务器实现服务器采用Java Socket编程实现,包括以下功能模块:- 连接模块:负责与客户端建立连接。

- 文件管理模块:实现文件创建、读取、写入和删除等操作。

文件管理实验报告

文件管理实验报告

文件管理实验报告一、实验目的本次文件管理实验旨在深入了解和掌握文件管理的基本原理和操作方法,提高对文件系统的认识和运用能力,培养良好的文件管理习惯,以提高工作和学习的效率。

二、实验环境操作系统:Windows 10应用软件:资源管理器三、实验内容及步骤(一)文件的创建与命名1、打开资源管理器,选择合适的存储位置(如桌面、D 盘等)。

2、右键单击空白处,选择“新建”,然后根据需要创建文本文档、Word 文档、Excel 表格等不同类型的文件。

3、为创建的文件进行合理的命名,遵循简洁、清晰、有意义的原则,避免使用模糊、无意义或过长的文件名。

(二)文件的复制、移动与删除1、复制文件选中要复制的文件,按下Ctrl +C 组合键或右键单击选择“复制”。

导航到目标位置,按下 Ctrl + V 组合键或右键单击选择“粘贴”。

2、移动文件选中要移动的文件,按下Ctrl +X 组合键或右键单击选择“剪切”。

导航到目标位置,按下 Ctrl + V 组合键或右键单击选择“粘贴”。

3、删除文件选中要删除的文件,按下 Delete 键或右键单击选择“删除”。

在弹出的确认对话框中,选择“是”确认删除。

(三)文件的搜索与查找1、利用资源管理器的搜索功能,在搜索框中输入文件名、关键词或文件类型等信息,快速找到所需文件。

2、学会使用高级搜索选项,如指定搜索范围、修改时间、文件大小等条件,进一步精确搜索结果。

(四)文件的分类与整理1、根据文件的类型(如文档、图片、音频、视频等)、用途(工作、学习、娱乐等)或项目等进行分类。

2、创建不同的文件夹来存放各类文件,并为文件夹进行清晰的命名。

3、将相关文件移动到对应的文件夹中,保持文件系统的整洁和有序。

(五)文件的备份与恢复1、选择重要的文件或文件夹,将其复制到外部存储设备(如 U 盘、移动硬盘)或云存储服务(如百度网盘、OneDrive)中进行备份。

2、模拟文件丢失或损坏的情况,从备份中恢复文件,验证备份的有效性。

文件管理实验报告

文件管理实验报告

文件管理实验报告一、实验目的本次文件管理实验的主要目的是深入了解和掌握文件管理的基本原理和操作方法,通过实际操作和观察,提高对文件系统的认识和运用能力,培养良好的文件管理习惯,以提高工作和学习的效率。

二、实验环境本次实验使用的操作系统为 Windows 10,使用的工具包括资源管理器、命令提示符等。

三、实验内容与步骤(一)文件和文件夹的创建与命名1、打开资源管理器,选择合适的磁盘分区和文件夹。

2、右键单击空白处,选择“新建”,然后分别创建文本文件、Word 文档、文件夹等。

3、为创建的文件和文件夹进行合理的命名,遵循清晰、简洁、有意义的原则,例如“学习资料_数学”“工作周报_202309”等。

(二)文件和文件夹的复制、移动与删除1、选中要操作的文件或文件夹,可以使用鼠标左键单击或按住Ctrl 键进行多选。

2、对于复制操作,右键单击选中的对象,选择“复制”,然后在目标位置右键单击选择“粘贴”。

3、移动操作类似,只是选择“剪切”而不是“复制”。

4、删除文件或文件夹时,选中对象后按下 Delete 键,或者右键单击选择“删除”。

需要注意的是,删除操作是不可逆的,对于重要文件要谨慎操作。

(三)文件和文件夹的属性设置1、右键单击文件或文件夹,选择“属性”。

2、在属性对话框中,可以设置文件的只读、隐藏等属性。

3、了解文件的大小、创建时间、修改时间等信息。

(四)文件的搜索与查找1、在资源管理器的搜索框中输入关键词,如文件名、文件内容中的部分文字等。

2、可以设置搜索范围、搜索条件等,以更精确地找到所需文件。

(五)文件的压缩与解压缩1、选择要压缩的文件或文件夹,右键单击选择“添加到压缩文件”。

2、可以设置压缩格式、压缩级别等参数。

3、对于压缩文件,右键单击选择“解压到当前文件夹”或“解压到指定文件夹”进行解压缩操作。

四、实验中遇到的问题及解决方法(一)问题 1:误删除重要文件在进行删除操作时,不小心删除了一个包含重要数据的文件夹。

文件系统 实验报告

文件系统 实验报告

文件系统实验报告引言文件系统是操作系统中的一部分,用于管理计算机中的文件和目录。

它提供了数据的存储、访问、组织和管理功能,是操作系统的基础之一。

本实验通过实现一个简单的文件系统来深入理解文件系统的原理和实现方式。

实验目的1. 了解文件系统的基本概念和原理;2. 学习文件系统的设计和实现方法;3. 掌握文件系统的基本操作。

实验环境本次实验使用的是Ubuntu 20.04操作系统。

实验步骤1. 文件系统的设计在开始实现文件系统之前,我们首先需要设计文件系统的结构和功能。

1.1 文件系统的结构文件系统通常由三个主要部分组成:文件控制块、目录和数据块。

文件控制块用于存储文件的属性和元数据,目录用于组织文件和子目录,数据块用于存储文件的实际内容。

1.2 文件系统的功能文件系统需要提供以下功能:- 文件的创建、读取、修改和删除;- 目录的创建、读取、修改和删除;- 文件和目录的查找;- 文件的权限管理。

2. 文件系统的实现2.1 文件系统的初始化在实现文件系统之前,我们首先需要初始化文件系统。

包括创建超级块、位图和根目录,并将它们写入磁盘。

2.2 文件和目录的操作在文件系统中,我们需要实现文件和目录的基本操作,包括创建文件、创建目录、读取文件内容、修改文件内容和删除文件。

2.3 文件系统的其他操作除了基本的文件和目录操作之外,文件系统还需要实现其他一些功能,如文件查找、权限管理等。

3. 文件系统的测试在完成文件系统的实现后,我们需要对其进行测试,以验证其功能是否正常。

3.1 创建文件和目录我们首先创建一些文件和目录,检查它们是否被正确地写入磁盘,并且能够被正确地读取。

3.2 读取和修改文件我们随机选择一些文件,读取它们的内容,并对其内容进行修改。

修改后,我们再次读取文件,确保修改成功。

3.3 删除文件和目录我们尝试删除一些文件和目录,并检查它们是否被成功地删除。

4. 结果与讨论经过测试,我们发现我们实现的文件系统功能正常,能够按照我们的预期进行文件和目录的创建、读取、修改和删除等操作。

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:移动或重命名文件。

文件管理实验报告

文件管理实验报告

一、实验目的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. 文件系统性能优化通过磁盘碎片整理和清理磁盘中的临时文件,我们提高了文件系统的性能。

文件管理实验报告答案(3篇)

文件管理实验报告答案(3篇)

第1篇一、实验目的1. 理解文件管理的概念和作用。

2. 掌握文件系统的基本操作,如创建、删除、复制、移动等。

3. 学会使用文件管理工具,提高文件管理效率。

二、实验环境1. 操作系统:Windows 102. 文件管理工具:Windows资源管理器3. 实验设备:计算机三、实验内容1. 文件系统的基本概念文件系统是操作系统用来组织和管理文件的一种机制。

它主要包括以下内容:(1)文件:数据的基本单位,可以存储信息、程序等。

(2)目录:文件系统的组织单位,用于存放文件和子目录。

(3)路径:文件在文件系统中的位置,由目录名和文件名组成。

2. 文件系统的基本操作(1)创建文件:在指定目录下创建一个新的文件。

操作步骤:1)打开Windows资源管理器;2)找到要创建文件的目录;3)右键单击空白区域,选择“新建”;4)选择文件类型,如文本文档、Word文档等;5)输入文件名,点击“确定”。

(2)删除文件:删除指定的文件。

操作步骤:1)打开Windows资源管理器;2)找到要删除的文件;3)右键单击文件,选择“删除”;4)在弹出的确认对话框中点击“是”。

(3)复制文件:将文件从一个目录复制到另一个目录。

操作步骤:1)打开Windows资源管理器;2)找到要复制的文件;3)右键单击文件,选择“复制”;4)打开目标目录,右键单击空白区域,选择“粘贴”。

(4)移动文件:将文件从一个目录移动到另一个目录。

操作步骤:1)打开Windows资源管理器;2)找到要移动的文件;3)右键单击文件,选择“剪切”;4)打开目标目录,右键单击空白区域,选择“粘贴”。

3. 文件管理工具的使用(1)文件搜索:在文件系统中快速找到所需的文件。

操作步骤:1)打开Windows资源管理器;2)在地址栏输入文件名或部分内容;3)按Enter键或点击搜索按钮。

(2)文件预览:查看文件内容,如图片、文档等。

操作步骤:1)打开Windows资源管理器;2)找到要预览的文件;3)双击文件,系统会自动打开相应的应用程序进行预览。

文件管理系统实验报告

文件管理系统实验报告

文件管理系统实验报告文件管理系统实验报告一、引言文件管理系统是现代社会中不可或缺的一部分。

随着信息技术的迅猛发展,文件的产生和管理变得越来越重要。

本实验旨在通过设计和实现一个简单的文件管理系统,探索文件管理的原理和方法。

二、实验目的1.了解文件管理系统的基本概念和功能;2.掌握文件的创建、读取、修改和删除等操作;3.熟悉文件的组织和存储结构;4.实践文件管理系统的设计和实现。

三、实验内容1.文件的创建和读取在文件管理系统中,文件的创建和读取是最基本的操作。

通过调用系统函数,我们可以创建一个新文件,并向其中写入数据。

而读取文件则是通过指定文件路径和文件名来获取文件的内容。

2.文件的修改和删除文件的修改和删除是文件管理系统中的常见操作。

通过系统函数,我们可以打开一个已有的文件,并对其进行修改。

而删除文件则是通过指定文件路径和文件名来删除一个文件。

3.文件的组织和存储结构文件管理系统中,文件的组织和存储结构对于文件的管理和访问有着重要的影响。

常见的文件组织结构包括顺序文件、索引文件和哈希文件等。

在本实验中,我们将选择适合的文件组织结构,并实现相应的存储和检索算法。

四、实验步骤1.设计文件管理系统的数据结构在开始实验之前,我们需要先设计文件管理系统的数据结构。

这包括文件控制块(FCB)、目录项(Directory Entry)和文件块(File Block)等。

通过合理的数据结构设计,可以提高文件管理系统的性能和效率。

2.实现文件的创建和读取功能根据文件管理系统的设计,我们可以开始实现文件的创建和读取功能。

通过调用系统函数,我们可以创建一个新的文件,并向其中写入数据。

而读取文件则是通过指定文件路径和文件名来获取文件的内容。

3.实现文件的修改和删除功能文件的修改和删除是文件管理系统中的常见操作。

通过调用系统函数,我们可以打开一个已有的文件,并对其进行修改。

而删除文件则是通过指定文件路径和文件名来删除一个文件。

文件管理实验报告结果(3篇)

文件管理实验报告结果(3篇)

第1篇一、实验目的本次实验旨在通过实际操作,验证文件管理的有效性和可行性,并对文件管理系统的性能进行评估。

通过实验,了解文件管理的相关原理和方法,提高文件管理的实践能力。

二、实验环境1. 操作系统:Windows 102. 文件管理系统:Windows文件管理器3. 实验数据:实验过程中产生的文件和数据三、实验内容1. 文件创建与删除2. 文件夹创建与删除3. 文件与文件夹的复制、移动、重命名4. 文件属性的设置与修改5. 文件搜索与查找6. 文件权限管理7. 文件压缩与解压四、实验步骤1. 文件创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件.txt”的文本文件。

(2)在“实验文件.txt”上右击,选择“删除”,确认删除。

2. 文件夹创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件夹”的文件夹。

(2)在“实验文件夹”上右击,选择“删除”,确认删除。

3. 文件与文件夹的复制、移动、重命名(1)将“实验文件.txt”复制到“实验文件夹”中。

(2)将“实验文件.txt”移动到桌面。

(3)将“实验文件.txt”重命名为“实验文件修改.txt”。

4. 文件属性的设置与修改(1)在“实验文件修改.txt”上右击,选择“属性”,设置文件属性为“只读”。

(2)修改“实验文件修改.txt”的属性为“隐藏”。

5. 文件搜索与查找(1)在Windows文件管理器中,输入“实验文件”进行搜索。

(2)使用“查找”功能,查找“实验文件修改.txt”。

6. 文件权限管理(1)在“实验文件夹”上右击,选择“属性”,点击“安全”标签。

(2)添加用户权限,设置权限为“完全控制”。

7. 文件压缩与解压(1)将“实验文件夹”压缩为“实验文件夹.zip”。

(2)解压“实验文件夹.zip”到指定位置。

五、实验结果与分析1. 文件创建与删除:实验成功创建和删除了文件,验证了文件管理的可行性。

2. 文件夹创建与删除:实验成功创建和删除了文件夹,验证了文件管理的可行性。

操作系统实验-文件系统扩展实验报告

操作系统实验-文件系统扩展实验报告

实验报告要求1.实验名称:文件系统扩展实验2.实验要求:对【程序5_9】进行扩展,要求参数为目录名,且其下至少有三层目录,分别用深度遍历及广度遍历两种方法对此目录进行遍历,输出此目录下所有文件的大小及修改时间。

3.实验目的:(在实验过程中应用的操作系统理论知识)1.熟悉和应用深度优先和广度优先遍历算法2.熟练掌握linux 系统下关于文件系统的API3.掌握有关数据结构和指针的应用4.掌握使用gdb 调试的方法5.掌握实际运用中堆栈的内存分配4.实验内容:(为完成实验,如何进行程序设计)DFS:整体思路: 从所给的目录进入,按照reddir打开指针的顺序开始逐个遍历,遇到文件就按照规定格式输出信息。

遇到目录就对该目录进行DFS,之后返回上一级继续遍历。

当当前目录没有文件时返回流程图:重点部分: 重点是DFS 对退出循环和回溯时间点的把握。

这里退出循环的时间点是当前目录没有可读文件或者目录。

回溯时间点是当读到的文件为目录时,进入下一层DFS BFS:整体思路:利用队列,参考二叉树的层次遍历。

先将根目录入队,循环出队列。

进入目录后,当读取到文件时,输出信息;当读取到目录时,将目录入队,继续读取下一个文件;当当前目录的文件遍历完成时,退出此目录循环,从队列中弹出一个目录,再进入循环。

当队列为空时,退出。

流程图:重点部分: 1. 队列的建立,队列使用链表连接,存放字符串数据,要注意内存的分配和释放2.入队出队的时机;先将根目录入队,退出循环的条件为队列为空。

入队的条件为当前文件为目录。

出队的条件为一个目录遍历完毕。

5.程序:(较之已有程序有修改的、新增的程序段加下划线)#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<sys/types.h>#include<sys/stat.h>#include<dirent.h>#include<time.h>#include<string.h>#include<ctype.h>/*辅助函数输出文件的大小和最后修改时间*/static int get_file_size_time(const char *filename){struct stat statbuf;if(stat(filename,&statbuf)==-1) //取filename 的状态{printf("Get stat on %s Error:%s\n",filename,strerror(errno));return(-1);}if(S_ISDIR(statbuf.st_mode))return(1); //判断是否是目录文件if(S_ISREG(statbuf.st_mode)) //判断是否是普通文件printf("\t size:%ld bytes\t modifiedate: %s\n",statbuf.st_size,ctime(&statbuf.st _mtime)); //输出文件的大小和最后修改时间return(0);}/******************************** BFS 利用队列********************************************/// 在strcpy 指针前要先申请空间struct node {char* data;struct node* next;// struct node* pre;} *head,*tail,*tmp; // 头节点,尾节点,临时节点count++; }6.运行结果:(进行反白处理后截图)DFS:BFS7.实验总结:编程、调试过程中遇到的问题及解决办法。

Lniux文件系统实验报告

Lniux文件系统实验报告

实验五文件系统
一、实验目的
1.掌握Linux系统下fdisk命令的用法。

2.掌握Linux系统下文件系统的创建、挂载与卸载。

3.掌握Linux系统下利用RAID技术实现磁盘冗余阵列的方法。

二、实验内容
1.磁盘分区管理
2.动态磁盘管理
三、实验指导
1.服务器现需要新建一块20GB的硬盘,需要对新增的硬盘进行分区管理、分区方案为/user目录所在分区10GB,/backup目录所在分区5GB,/home目录所在分区5GB。

步骤一,添加新硬盘
点击“编辑虚拟机设置”按钮,如下图
选择添加硬盘,如下图
下一步选择“SCSI(S)推荐”,如下图
下一步创建“新虚拟磁盘”,设置磁盘空间大小为“20GB”,如下图所示
单击完成,即完成了新硬盘的添加,如下图所示
通过fdisk -l命令查看新硬盘是否添加成功
步骤二,利用fdisk命令对/dev/sdb/进行分区
步骤三,格式化新建分区,在各分区上建立ext3类型的文件的系统,建立时要求检查磁盘坏块并显示详细信息。

步骤四,将/dev/sdb1挂载到/user目录,/dev/sdb2挂载到
/backup目录,/dev/sdb3挂载到/home目录
2、某公司的Linux服务器新增两块硬盘,硬盘大小为40GB。

为了实现数据保护功能,现需利用2块硬盘创建RAID1卷。

要求创建的RAID设备名为/dev/md110,并利用mkfs命令创建ext3文件系统。

最后将文件系统挂载到系统上。

四、实验总结
通过本次实验,我学习到fdisk 的一些命令和在Linux 系统下利用RAID 技术实现磁盘冗余阵列的方法。

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

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

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

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

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

OFFICE。

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

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

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

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

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

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

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

管理文件的实验报告

管理文件的实验报告

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

2. 掌握文件系统的基本操作,如创建、删除、复制、移动等。

3. 学习文件系统的安全性和权限管理。

4. 提高文件管理的效率,确保文件的安全性和可靠性。

二、实验环境1. 操作系统:Windows 102. 文件系统:NTFS3. 实验软件:Microsoft Windows Explorer三、实验内容1. 文件系统的基本概念和原理2. 文件系统的基本操作3. 文件系统的安全性和权限管理4. 文件系统的备份与恢复四、实验步骤1. 文件系统的基本概念和原理(1)打开Windows Explorer,观察文件系统的结构,了解文件和文件夹的层次关系。

(2)分析文件系统的目录结构,了解目录、文件和路径的概念。

(3)学习文件系统的存储方式,了解文件系统的存储单元和数据组织。

2. 文件系统的基本操作(1)创建文件夹:在Windows Explorer中,右键单击目标位置,选择“新建”->“文件夹”,输入文件夹名称,按Enter键。

(2)删除文件:选中要删除的文件,右键单击,选择“删除”,确认删除。

(3)复制文件:选中要复制的文件,右键单击,选择“复制”,在目标位置右键单击,选择“粘贴”。

(4)移动文件:选中要移动的文件,右键单击,选择“剪切”,在目标位置右键单击,选择“粘贴”。

3. 文件系统的安全性和权限管理(1)设置文件夹权限:选中要设置权限的文件夹,右键单击,选择“属性”,在“安全”选项卡中,添加用户或组,设置权限。

(2)设置文件属性:选中要设置属性的文件,右键单击,选择“属性”,在“常规”选项卡中,设置只读、隐藏等属性。

4. 文件系统的备份与恢复(1)创建备份:在Windows Explorer中,右键单击要备份的文件夹,选择“发送到”->“压缩(zipped)文件夹”,将备份文件保存在指定位置。

(2)恢复备份:将备份文件解压,将解压后的文件夹内容复制到原位置。

文件管理实验实验报告

文件管理实验实验报告

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

2. 掌握文件系统的组织结构和文件操作的基本方法。

3. 培养实际操作能力,提高文件管理的效率。

二、实验环境1. 操作系统:Windows 102. 文件管理工具:Windows自带的文件管理器三、实验内容1. 文件系统的基本概念和原理2. 文件系统的组织结构3. 文件操作的基本方法4. 文件夹的创建、删除、重命名等操作5. 文件和文件夹的搜索与查找6. 文件属性的查看和修改7. 文件和文件夹的复制、移动、粘贴等操作8. 文件和文件夹的压缩与解压缩9. 文件和文件夹的权限设置四、实验步骤1. 打开文件管理器,查看当前文件夹的结构。

2. 创建一个新的文件夹,命名为“实验文件夹”。

3. 在“实验文件夹”中创建一个文本文件,命名为“实验.txt”。

4. 打开“实验.txt”,输入以下内容:实验报告:文件管理实验5. 保存并关闭“实验.txt”。

6. 将“实验.txt”复制到“实验文件夹”中。

7. 将“实验.txt”移动到桌面。

8. 重命名“实验.txt”为“实验1.txt”。

9. 删除“实验1.txt”。

10. 搜索“实验文件夹”中的文件。

11. 查看文件属性。

12. 修改文件属性。

13. 压缩“实验文件夹”。

14. 解压缩“实验文件夹”。

15. 设置文件和文件夹的权限。

五、实验结果与分析1. 文件系统的基本概念和原理:通过实验,我们了解到文件系统是计算机中用于存储和管理文件的数据结构,包括文件、文件夹、磁盘等。

文件系统负责对文件进行组织、存储、检索、更新等操作。

2. 文件系统的组织结构:实验中,我们通过文件管理器查看当前文件夹的结构,了解到文件系统采用树状结构组织文件和文件夹。

3. 文件操作的基本方法:实验中,我们学习了文件和文件夹的创建、删除、重命名、复制、移动、粘贴等操作方法。

4. 文件和文件夹的搜索与查找:实验中,我们通过文件管理器搜索功能,快速找到所需的文件和文件夹。

文件系统实验报告

文件系统实验报告

试验四文件系统之蔡仲巾千创作一、二、实验目的1、用高级语言编写和调试一个简单的文件系统, 模拟文件管理的工作过程.从而对各种文件把持命令的实质内容和执行过程有比力深入的了解.2、要求设计一个n个用户的文件系统, 每次用户可以保管M个文件.用户在一次运行中只能翻开一个文件, 对文件必需设置呵护办法, 且至少有create、delete、open、close、read、write等命令.三、实验题目:采纳二级目录结构实现磁盘文件把持.要求:1.普通文件的目录项包括文件名, 文件类型, 文件长度, 指向文件内容的指针内容.2.目录文件的目录项包括目录名, 指向下一级目录块的指针内容.假定每个目录文件最多只能占用一个块;3.法式功能方面的要求:需要实现一个命令行把持界面, 包括如下命令:4.法式实现方面的要求:(1)、对重名(创立时), 文件不存在(删除时), 目录不存在(改变目录时)等毛病把持情况, 法式应该做出相应处置并给犯毛病信息, 可是法式不得因此而退出.(2)、界面友好, 法式强壮.(3)、设置界面的提示符, 提示的命令以及调试的方法应和前面的要求一致.不要自己设计命令或者附加不要求的功能.:执行文件名:Project1.exe四.实验分析1)总论:该系统是一个多用户、多任务的实时把持系统.对用户和用户的文件数目并没有上限.也就是说该系统允许任何用户申请空间, 而且在其目录下的文件数目其实不做任何的限制.该系统的把持命令如下:①、bye-用户注销命令.当使用该命令时, 用户退出系统.命令格式:run\bye↙系统注销该用户并回到登岸界面.②、close-删除用户注册信息命令.执行该命令后, 用户在系统中的所有信息, 包括该用户目录下的所有文件都被删除.命令格式:run\close↙.完成后返回登岸界面.③、create-在以后目录下创立一个文件, 且该文件不能跟系统中的文件重名.该文件的管理信息登录到用户文件信息管理模块中.命令格式:run\create>file1↙.其中file1为要创立的文件名称.执行完该命令后回到执行命令行.④、delete-删除以后用户目录下的一个文件.命令格式:run\delete>file1↙.返回命令行.⑤、list-显示以后注册目录下的所有文件信息, 包括文件名、文件长度、文件把持权限.命令格式:run\list↙.⑥、chmod-改变某个文件的执行权限, 但前提是该文件是该用户目录下的文件.命令格式:run\chmod>file1↙.⑦、open-在window界面下翻开某个文件.命令格:run\open>file1↙.执行该命令后, 文件file1将用在windows界面下的文件形式翻开.用户可以在这个方式中对文件进行修改, 并将修改后的内容保管.⑧、read-读文件信息.将文件信息读入并显示在终端.命令格式:run\read>file1↙.⑨、write-向某个文件写入新的信息.用户可以选择用覆盖原来内容的方式和在文件的末尾拔出新信息的方式写入信息. 2)_系统采纳二级文件目录.设置主目录(MFD)和用户文件目录(UFD), 分别以文件的方式保管在磁盘中.在主目录中又注册用户的用户名和另一标识表记标帜该用户目录下是否有文件的指针标识表记标帜.用户文件目录用用户名作为文件名保管在磁盘, 以便检索时方便对应.在用户文件目录中保管着该目录下所有的文件的文件名称、呵护码、文件长度. 3)该系统年夜量使用高级语言中的文件把持函数, 所以能实际看到文件的创立写入、读出、删除等效果.4) 实验流程图5)源法式:#include<iostream.h>#include<stdio.h> #include<stdlib.h> #include<string.h> #include "conio.h" #include<dos.h>#define NULL 0#define keynum 10#define getspace(type) (type*)malloc(sizeof(type))char cmd[64]; //寄存用户输入命令char buffer[36];//char user[32];//寄存以后登岸的用户名typedef char ALFA[12];ALFA KWORD[keynum];struct UFD{//用户文件管理模块char filename[32]; //文件名int safecode; //文件呵护码long length; //文件长度}*curfile = NULL;struct MFD{//用户登岸信息管理模块char username[32]; //用户名bool filepoint; //用户目录下的文件指针, false暗示目录为空}*curuser = NULL,*elseuser=NULL;typedef UFD UFD;typedef MFD MFD;void main();void KeyWord()//初始化命令关键字{strcpy(KWORD[ 1],"bye");strcpy(KWORD[ 2],"chmod");strcpy(KWORD[ 3],"close");strcpy(KWORD[ 4],"create");strcpy(KWORD[ 5],"delete");strcpy(KWORD[ 6],"list");strcpy(KWORD[ 7],"open"); strcpy(KWORD[ 8],"read");strcpy(KWORD[ 9],"write");}int LoginDisplay() //登岸选项把持函数{int SELETE_1 = 0;do{cout<<" *****请选择把持*****\n1、用户登岸 2、用户注册 0、退出"<<endl;cin>>SELETE_1;}while(SELETE_1<0 || SELETE_1>2);system("cls");return SELETE_1;}bool Login(int SELETE)//用户登岸, 注册函数{FILE *fp,*fp1,*fp2;char name[12];switch(SELETE){case 1://用户登岸if((fp = fopen("LOGIN.exe","rb")) == NULL)//翻开用户注册目录管理文件{cout<<"\n毛病:不能翻开登岸文件."<<endl;getch();system("cls");return false;}curuser = getspace(MFD);cout<<"\n*****登岸*****\n用户名:";cin>>name; //输入用户登岸名while(!feof(fp)) //检查该用户是否合法{fread(curuser,sizeof(MFD),1,fp);if(strcmp(curuser->username,name)==0)break;}if(feof(fp)) //如果没有找到跟以后登岸用户名相同的管理信息, 提示犯错{cout<<"\n毛病:该用户不存在."<<endl;fclose(fp);return false;}else{fclose(fp);return true;}break;case 2: //新用户注册if((fp=fopen("LOGIN.exe","ab"))==NULL)//如果登岸信息管理文件不存在fp=fopen("LOGIN.exe","wb+"); //创立该信息管理文件char name[12];curuser = getspace(MFD);while(1){cout<<"\n *****新用户注册*****"<<endl;cout<<"用户名:";cin>>name; //输入用户注册名fp1 = fopen("LOGIN.exe","rb");while(!feof(fp1))//检查该用户名是否被另外用户占用{fread(curuser,sizeof(MFD),1,fp1);if(strcmp(curuser->username,name) == 0)//该名称已经被使用{cout<<"\n该用户已经存在, 请重新输入!"<<endl;getch();break;}}if(feof(fp1))//该名称没有被另外用户占用{strcpy(curuser->username,name);curuser->filepoint = NULL;fwrite(curuser,sizeof(MFD),1,fp);strcpy(user,curuser->username);//生成用户文件管理模块strcat(user,".exe"); //用于管理用户目录下的各个文件fp2=fopen(user,"wb+");fclose(fp2);cout<<"\n注册胜利!"<<endl; //提示注册胜利fclose(fp1);fclose(fp);break;}}fp = fopen("LOGIN.exe","rb"); //显示以后注册用户的名称while(1){fread(curuser,sizeof(MFD),1,fp);if(feof(fp))break;cout<<curuser->username<<endl;getch();}fclose(fp);return true;break;default:return false;break;}}void DisplayUFD()//打印用户信息, 包括用户的各个文件//名称、长度和把持权限的设置信息{if(curuser->filepoint == false)//以后用户目录下没有任何文件存在cout<<"\n用户 "<<curuser->username<<" 文件夹是空的"<<endl;else{//存在文件, 将所有文件信息打印在终端FILE *fp;char filename[12];strcpy(filename,curuser->username);strcat(filename,".exe");if((fp=fopen(filename,"rb"))==NULL)//翻开用户文件信息管理模块{cout<<"\n无法翻开用户:"<<curuser->username<<" 的文件!"<<endl;getch();return;}else{//读入并将用户全部文件信息打印在终端cout<<"用户:"<<curuser->username<<"目录下的文件:"<<endl;UFD *ufd;int i=0;ufd = getspace(UFD); //申请寄存用户文件模块的空间while(1){fread(ufd,sizeof(UFD),1,fp);if(feof(fp))//全部输出完毕, 结束break;else//打印信息cout<<ufd->filename<<"\t"<<ufd->length<<"\t"<<ufd->safecode<<endl;}}fclose(fp);}}void ByeFile(bool BOOL)//注销函数, 调用次函数用户可以退出系统{FILE *infile,*outfile;char out[50];strcpy(out,"outfilelocate.exe");if((infile=fopen("LOGIN.exe","rb"))==NULL){cout<<"\n保管毛病."; // fclose(infile);return;}else{if((outfile=fopen(out,"wb+"))==NULL)//申请一个缓冲区管理模块//寄存用户更新后的全部信息{cout<<"\n保管毛病.";// fclose(outfile);fclose(infile);return;}else{MFD *mfd = getspace(MFD);while(1){//将旧文件管理信息读出, 并保管到新的文件信息管理模块中fread(mfd,sizeof(MFD),1,infile);if(feof(infile))break;if((strcmp(mfd->username,curuser->username))==0){if(BOOL)//更新以后用户信息的把持fwrite(curuser,sizeof(MFD),1,outfile);else continue;//如果用户想把自己的注册目录从系统中完全删除//则执行该把持}elsefwrite(mfd,sizeof(MFD),1,outfile);//写入新的模块}fclose(infile);fclose(outfile);remove("LOGIN.exe");//将旧的该用户的文件管理模块删除rename(out,"LOGIN.exe");//将新的用户的文件管理模块重命名为用户目录下的管理模块}}system("cls");main();}bool ClearUserFile()//用户要将自己的注册目录从系统完全删除//首先将该用户目录下的全部文件删除{FILE *fp;char file[50];strcpy(file,curuser->username);strcat(file,".exe");if((fp=fopen(file,"rb"))==NULL) //翻开用户文件信息管理模块{// fclose(fp);cout<<"\n把持失败.";return true;}else{//将该用户目录下的文件逐个从磁盘删除UFD *ufd = getspace(UFD);while(1){fread(ufd,sizeof(UFD),1,fp);if(feof(fp))break;elseremove(ufd->filename);//删除文件}fclose(fp);return true;}}void ClearUserMes()//删除用户全部信息{char name[50];strcpy(name,curuser->username);strcat(name,".exe");remove(name); //从磁盘中删除用户文件信息管理模块ByeFile(false);//更新系统的用户登岸信息管理模块}void DeleteUser()//删除用户注册目录的把持{char ch;cout<<"\n该把持将会是你在系统所有信息删除, 下次登岸时你必需重新申请用户名!"<<endl;cout<<"\n你确定要删除你在系统中的注册信息吗?Y/N"<<endl;cin>>ch;switch(ch)//提示用户确认删除{case 'Y':case 'y':if(ClearUserFile())//如果用户的全部文件已经删除//则可以将该用户的文件信息管理模块也从磁盘中删除//以免在没完全删除文件却删了该文件信息管理模块//使得这些文件无法再进行管理造成磁盘空间的浪费ClearUserMes();//删除文件信息管理模块break;default:cout<<"\n你取消了此把持!";break;}}void CreatFile()//在以后用户目录下创立文件{FILE *fp;curuser->filepoint=true;if((fp=fopen(buffer,"r"))==NULL)//如果没有跟用户输入文件名相同的文件{if((fp=fopen(buffer,"w"))==NULL){cout<<"\n创立文件失败!";// fclose(fp);return;}fclose(fp);}else{//用户要创立的文件已经存在cout<<"\n该文件已经存在, 创立另一个文件?Y/N";char ch;cin>>ch;switch(ch){case 'Y':case 'y':cout<<"\n输入新文件名:";cin>>buffer;strcat(buffer,".txt");fclose(fp);if((fp=fopen(buffer,"w"))==NULL){cout<<"\n创立文件失败!";// fclose(fp);return;}fclose(fp);break;default:fclose(fp);return;}}strcpy(user,curuser->username);strcat(user,".exe");curfile = getspace(UFD);strcpy(curfile->filename,buffer);//文件名curfile->length=0; //该文件长度为零curfile->safecode=30; //设置该文件的默认权限//11 00, 文件主有读和写权, 其他用户没有读写权if((fp=fopen(user,"ab"))==NULL){cout<<"\n毛病:你可能不是合法用户."<<endl;getch();}else{fwrite(curfile,sizeof(UFD),1,fp);//将该文件信息写入用户文件信息管理模块中cout<<"\n文件"<<curfile->filename<<" 创立胜利!";}fclose(fp);}void DeleteFile()//删除以后目录下一个文件的把持{char ch;FILE *infile,*outfile;cout<<"\n确定要删除文件:"<<buffer<<" Y/N"<<endl;cin>>ch;//提示用户确认删除switch(ch){case 'Y':case 'y'://更新用户文件信息管理模块, 这里同样使用缓冲区模块来更新//方法与上面将到的类似char out[50],in[50];strcpy(out,"outfilelocate.exe");strcpy(in,curuser->username);strcat(in,".exe");if((infile=fopen(in,"rb"))==NULL)//翻开该用户的文件信息管理模块{cout<<"\n保管毛病.";//fclose(infile);return;}else{if((outfile=fopen(out,"wb+"))==NULL){cout<<"\n保管毛病.";// fclose(outfile);fclose(infile);return;}else{UFD *ufd = getspace(UFD);while(1){fread(ufd,sizeof(UFD),1,infile);//从旧模块读出信息if(feof(infile))break;if((strcmp(ufd->filename,buffer))==0)//要进行更新的信息continue;elsefwrite(ufd,sizeof(UFD),1,outfile);//写入新模块}fclose(infile);fclose(outfile);remove(in);//在磁盘移除就模块rename(out,in); //新模块命名为以后用户文件信息管理模块}}remove(buffer);//从磁盘中删除该文件break;default:break;}}void ListAllFile()//显示以后用户目录下的文件信息{DisplayUFD();}void OpenFile()//在window模式下翻开该文件{}bool QueryModElse(bool BOOL,bool &flag)//查询其它用户目录下文件的文件//当该文件的权限允许以后用户对其执行有关把持时, 返回ture {FILE *fp;char user[50];UFD *ufd = getspace(UFD);//elseuser暗示除以后用户外的所有用户注册目录strcpy(user,elseuser->username);strcat(user,".exe");if((fp=fopen(user,"rb"))==NULL){//翻开一个其它的用户文件信息管理模块// fclose(fp);cout<<"\n把持呈现毛病, 对此我们暗示歉意!";return false;}else{while(1){fread(ufd,sizeof(UFD),1,fp);if(feof(fp)){fclose(fp);return false;}if(strcmp(ufd->filename,buffer)==0){if(BOOL)//该用户请求写该文件{if(ufd->safecode== 31 || ufd->safecode== 33)//1101、1111最后一位为1, 有写权return true;else{cout<<"\n你无权对文件"<<buffer<<" 执行此把持!";flag=true;return false;}//flag设置为true, 告诉上一层, 无须再查找//该文件已经找到, 但用户无权执行相关把持}else //该用户请求读权{if(ufd->safecode == 32 || ufd->safecode == 33)//1110、1111倒数第二位为1, 有读权return true;else{cout<<"\n你无权对文件"<<buffer<<" 执行此把持!";flag=true;return false;}}}}}}bool QueryMod(bool BOOL)//查询权限{//首先在用户目录下查找, 如果找不到用户以后要进行把持的文件名//则在其它注册用户目录下查找FILE *fp,*fp1;bool flag=false;char user[50];UFD *ufd = getspace(UFD);strcpy(user,curuser->username);strcat(user,".exe");if((fp=fopen(user,"rb"))==NULL){//翻开用户文件信息管理模块// fclose(fp);cout<<"\n把持呈现毛病, 对此我们暗示歉意!";return false;}else{//查找匹配的文件名, 用户目录下的文件允许用户进行读写把持while(1){fread(ufd,sizeof(UFD),1,fp);if(feof(fp)){//在以后用户文件管理模块中找不到匹配文件//则继续在其它用户注册目录下查找fclose(fp);fp1=fopen("LOGIN.exe","rb");elseuser = getspace(MFD);bool BOOL_1=false;while(1){fread(elseuser,sizeof(MFD),1,fp1);//读其它用户信息if(feof(fp1) && !BOOL_1)//全部用户都查找完//但仍然没找到匹配的文件return false;if(elseuser != curuser){if((BOOL_1=QueryModElse(BOOL,flag)))//查找return true;if(flag)return false;}}}if(strcmp(ufd->filename,buffer)==0){//在以后用户注册目录下//找到该文件, 返回真值fclose(fp);return true;}}}}bool WriteRight(int len,bool BOOL)//检查是否已经正确地写入到该文件信息中//是则返回真值{char user[50],outfile[50];FILE *fp,*fp1;strcpy(user,elseuser->username);strcat(user,".exe");if((fp=fopen(user,"rb"))==NULL){return false;}else{UFD *ufd = getspace(UFD);while(1){//在此用户目录下查找匹配文件fread(ufd,sizeof(UFD),1,fp);if(feof(fp)){fclose(fp);return false;}if((strcmp(ufd->filename,buffer))==0){//找到要写入新的长度的文件strcpy(outfile,"outfilelocate.exe");if((fp1=fopen(outfile,"wb+"))==NULL){cout<<"\n毛病:写入文件长度犯错_3.";// fclose(fp1);fclose(fp);return false;}else{fclose(fp);fp=fopen(user,"rb");//文件指针重新指向此用户文件信息管理模块开头while(1){fread(ufd,sizeof(UFD),1,fp);if(feof(fp))break;if(strcmp(ufd->filename,buffer)==0){//找到匹配的文件if(BOOL) ufd->length+=len; //在文件末追加内容的把持else ufd->length =len;//覆盖原文件内容}fwrite(ufd,sizeof(UFD),1,fp1);}fclose(fp);fclose(fp1);remove(user);rename(outfile,user);return true;}}}}}void WriteLengthToFile(int Len,bool BOOL)//将文件长度写入文件管理模块中{//因为以后用户可以对其它用户的文件进行把持(只要权限允许)//所以应该在整个文件系统目录下查找该文件的位置FILE *fp;if((fp=fopen("LOGIN.exe","rb"))==NULL){//不能翻开文件cout<<"\n写入文件长度毛病_1!";// fclose(fp);return;}else{elseuser = getspace(MFD);while(1){fread(elseuser,sizeof(MFD),1,fp);if(feof(fp))break;else{if(WriteRight(Len,BOOL)){//检查是否已经正确地写入到该文件信息中fclose(fp);return;}}}cout<<"\n写入文件长度毛病_2!";fclose(fp);return;}}void WriteFile()//向文件写入信息的把持{if(!QueryMod(true))//查询以后用户对该文件是否有写权return;//对该文件没有写权则返回char ch;int i=0;FILE *fp;if((fp=fopen(buffer,"r"))==NULL)//查询该文件是否存在{cout<<"\n该文件不存在, 请创立该文件后再写入.";// fclose(fp);return;}fclose(fp);cout<<"\n请选择写入方式:"<<endl;cout<<" 1、覆盖原文件 2、在原文件末尾写入 3、取消"<<endl;cin>>ch;cout<<"开始输入正文:"<<endl;switch(ch){case '1'://覆盖原文件if((fp=fopen(buffer,"w"))==NULL)cout<<"\n文件翻开失败.";else{ch=getchar();while(ch!='#')//将新的文件内容写入到文件的磁盘位置中{i++;fputc(ch,fp);ch=getchar();}}fclose(fp);WriteLengthToFile(i,false);//将文件长度写入文件管理模块break;case '2':if((fp=fopen(buffer,"a"))==NULL)cout<<"\n文件翻开失败.";else{ch=getchar();while(ch!='#')//将新的文件内容写入到文件的磁盘位置中{i++;fputc(ch,fp);ch=getchar();}}fclose(fp);WriteLengthToFile(i,true);//将文件长度写入文件管理模块break;default:break;}}void ReadFile()//读文件函数{if(!QueryMod(false))//查询以后用户是否有权读该文件return;//没有读权, 则返回FILE *fp;if((fp=fopen(buffer,"r"))==NULL)//翻开该文件{cout<<buffer;cout<<"\n该文件不存在.";return;}else{char ch;ch=fgetc(fp);while(ch!=EOF)//将该文件信息逐一输出到终端{putchar(ch);ch=fgetc(fp);}cout<<endl;}fclose(fp);}void ChangeMod()//修改某文件的执行权限{int mod=40;FILE *fp,*infile,*outfile;char in[50],out[50];UFD *ufd = getspace(UFD);strcpy(in,curuser->username);strcat(in,".exe");strcpy(out,"outfilelocate.exe");if((fp=fopen(in,"rb"))==NULL){// fclose(fp);cout<<"\n把持呈现毛病, 对此我们暗示歉意!";return;}else{while(1){//检查该文件是否在以后用户的注册目录下//任何用户无权修改不是自己目录下的文件的权限值fread(ufd,sizeof(UFD),1,fp);if(feof(fp)){//在以后目录下找不到该文件, 说明该用户无权修改该文件权限cout<<"\n你没有权限对文件"<<buffer<<" 执行该把持!";fclose(fp);return;}if(strcmp(ufd->filename,buffer)==0){//找到该文件, 继续把持fclose(fp);break;}}}bool flag1=true;while(flag1){cout<<"\n输入文件 "<<buffer<<" 的新的权限值:";cin>>mod;//输入权限值if(mod<30 || mod>33){//确保输入的权限值正确cout<<"\n毛病:权限值必需在30~33之间";continue;}else{char ch;switch(mod){//告诉用户对该文件权限修改的结果, 以便用户确认case 30:cout<<"\n以后权限设置:其他用户对"<<buffer<<"既没读权也没写权!";break;case 31:cout<<"\n以后权限设置:其他用户对"<<buffer<<"没读权但有写权!";break;case 32:cout<<"\n以后权限设置:其他用户对"<<buffer<<"有读权但没写权!";break;case 33:cout<<"\n以后权限设置:其他用户对"<<buffer<<"既有读权也有写权!";break;default: break;}cout<<"\n确认按'Y', 取消按'N':";cin>>ch;switch(ch){case 'Y':case 'y':flag1=false;break;default: flag1=true;}}}//更新文件信息管理模块, 相关把持类似上面, 不在赘述if((infile=fopen(in,"rb"))==NULL){cout<<"\n把持呈现毛病, 对此我们暗示歉意!";fclose(infile);return;}else{if((outfile=fopen(out,"wb+"))==NULL){cout<<"\n把持呈现毛病, 对此我们暗示歉意!";fclose(infile);//fclose(outfile);return;}else{while(1){fread(ufd,sizeof(UFD),1,infile);if(feof(infile))break;if((strcmp(ufd->filename,buffer))==0)ufd->safecode=mod;fwrite(ufd,sizeof(UFD),1,outfile);}fclose(infile);fclose(outfile);remove(in);rename(out,in);}}}void Execute(int i,int len,int cmdset)//执行命令函数{int j=0;for(;i<len;i++){if(cmd[i]=='>'||cmd[i]==' ')break;buffer[j]=cmd[i];j++;}buffer[j]='\0';strcat(buffer,".txt");switch(cmdset){case 1: //退出ByeFile(true);break;case 2: //改变文件把持权限if((strcmp(buffer,".txt"))==0){cout<<"\n输入命令犯错!";return;}ChangeMod();break;case 3: //删除用户DeleteUser();break;case 4: //创立文件if((strcmp(buffer,".txt"))==0){cout<<"\n输入命令犯错!";return;}CreatFile();break;case 5: //删除文件if((strcmp(buffer,".txt"))==0){cout<<"\n输入命令犯错!";return;}DeleteFile();break;case 6: //列出该用户所有文件清单ListAllFile();break;case 7: //翻开文件if((strcmp(buffer,".txt"))==0){cout<<"\n输入命令犯错!";return;}OpenFile();break;case 8: //读文件if((strcmp(buffer,".txt"))==0){cout<<"\n输入命令犯错!";return;}ReadFile();break;case 9: //写文件if((strcmp(buffer,".txt"))==0){cout<<"\n输入命令犯错!";return;}WriteFile();break;default:break;}}void Command()//读取用户输入的命令, 并将其转换成系统能识另外命令{int len = 0,i,j;int cmdset;while(1){cmdset = 0;cout<<"\nrun\\";cin>>cmd;len = strlen(cmd);i=0;j=0;while(cmd[i]=='>'||cmd[i]==' '){i++;}//过滤空格键和'>'for(;i<len;i++){if(cmd[i]=='>' || cmd[i]==' ' || i==len-1){if(cmd[i]=='>' || cmd[i]==' ')buffer[j] = '\0';elseif(i==len-1){buffer[j]=cmd[i];buffer[j+1]='\0';}i++;j=0;int low=1,mid,high=keynum-1;bool BOOL = false;while(low<=high){//找到该命令关键字的内部识别码mid=(low+high)/2;if (strcmp(buffer,KWORD[mid])<=0) high=mid-1;if (strcmp(buffer,KWORD[mid])>=0) low=mid+1;if(strcmp(buffer,KWORD[mid])==0){BOOL = true;break;}}if(!BOOL){cout<<"\n"<<buffer<<"不是系统界说的命令...";cmdset = 0; break;}else {cmdset = mid;break;}}else{buffer[j] = cmd[i];j++;}}if(cmdset == 0) continue;while(cmd[i]=='>'||cmd[i]==' '){i++;}//过滤空格键和'>'buffer[0]='\0';Execute(i,len,cmdset); //执行该命令}}void main(){while(1){int SELETE = LoginDisplay();if(SELETE==0)exit(0);bool BOOL = Login(SELETE);//用户登岸, 或者注册函数if(BOOL){KeyWord(); //初始化命令关键字DisplayUFD();//打印用户目录下的文件Command(); //命令行把持}}}五.调试结果:1)系统界面如下:2)创立新用户:如果你以前还没有注册,则可以先选择2,创立一个用户.3)创立用户后,可以用create>xiao命令建立一个名为xiao的text文件.并可以用list检查文件的信息(xiao.txt是文件名, 0暗示文件以后的长度为0, 30用二进制暗示为1100, 暗示以后用户有读写权, 而其它用户没有读权也没有写权).4)用write>xiao命令向这个文件写信息,选择1或是2,输入信息如下: (注意:所有信息输入完后要以‘#’号键作为结束标识表记标帜.)5)用read>xiao命令读文件中的内容.6)此时再write>xiao命令向这个文件写信息,选择1,输入信息,并用read>xiao检查,结果如下:7)还可以用open>xiao这个命令翻开文件,发现文件内容酿成:8)以上是文件的基本把持,要理解这个系统的更多功能,用户只需亲自使用这个界面友好,提示众多的软件几分钟,就可以很自由的把持这个软件了.所以这里就纷歧一介绍了.:此次实验做的比力全面,编译也是用C++builder.主要是因为把持系统的课程设计也是类似的文件系统管理,可重新做类似的事,兴趣没有这么高了,不外还是有新的收获的.。

操作系统文件系统性能与安全实验报告

操作系统文件系统性能与安全实验报告

操作系统文件系统性能与安全实验报告1. 概述文件系统是操作系统中的重要组成部分,它负责管理文件的存储、组织和访问。

本次实验旨在研究操作系统文件系统的性能和安全性,并通过实验数据和分析得出结论。

2. 实验设计与环境为了评估文件系统的性能和安全性,我们选择了常用的三种文件系统进行实验:FAT32、NTFS和ext4。

实验环境搭建在一台具有充足资源的计算机上,操作系统为Windows 10和Linux。

3. 性能实验3.1 文件读取性能测试通过在不同文件系统上读取不同大小的文件,并记录读取时间,以评估文件系统在读取大文件和小文件时的性能差异。

3.2 文件写入性能测试同样地,在不同文件系统上写入不同大小的文件,并记录写入时间,以评估文件系统在写入大文件和小文件时的性能差异。

3.3 目录操作性能测试通过在不同文件系统上进行目录的创建、删除、重命名等操作,并记录所花费的时间,以评估文件系统在目录操作上的性能差异。

4. 安全性实验4.1 文件权限测试我们通过在不同文件系统上设置不同的文件权限,并测试用户对文件的读取、写入和执行权限,以评估文件系统对文件安全性的保护程度。

4.2 数据恢复测试在实验中,我们模拟文件系统崩溃等意外情况,测试文件系统的数据恢复能力,以评估文件系统对数据的安全性和可靠性。

4.3 密码保护测试通过在不同文件系统上设置文件加密功能,并测试文件系统的密码保护机制,以评估文件系统对数据隐私和安全的保护程度。

5. 实验结果与分析根据我们的实验数据和分析,我们得出以下结论:5.1 性能方面:- 在大文件读写性能方面,NTFS和ext4相对较好,而FAT32性能相对较差。

- 在小文件读写性能方面,ext4表现出色,NTFS次之,而FAT32仍然性能较差。

- 目录操作性能方面,ext4表现最佳,NTFS次之,而FAT32仍然相对较差。

5.2 安全性方面:- 在文件权限控制方面,NTFS和ext4提供了更加精细的权限设置,相对而言更安全可靠。

电脑文件操作实验报告

电脑文件操作实验报告

实验名称:电脑文件操作实验目的:1. 熟悉电脑文件系统的基本操作。

2. 掌握文件和文件夹的创建、复制、移动、删除、重命名等基本操作。

3. 了解文件属性的设置和文件搜索方法。

实验时间:2023年X月X日实验地点:计算机实验室实验器材:1. 电脑一台2. 实验指导书一份实验步骤:一、实验准备1. 打开电脑,进入操作系统界面。

2. 熟悉电脑桌面及基本操作。

二、文件和文件夹的基本操作1. 创建文件和文件夹- 在桌面或文件夹内,点击鼠标右键,选择“新建” -> “文本文档”或“文件夹”。

- 输入文件或文件夹名称,按回车键确认。

2. 复制文件和文件夹- 选中要复制的文件或文件夹,按住Ctrl键,拖动到目标位置。

- 或者选中文件或文件夹,右键点击选择“复制”,然后到目标位置粘贴。

3. 移动文件和文件夹- 选中要移动的文件或文件夹,按住Shift键,拖动到目标位置。

- 或者选中文件或文件夹,右键点击选择“剪切”,然后到目标位置粘贴。

4. 删除文件和文件夹- 选中要删除的文件或文件夹,按Delete键。

- 或者选中文件或文件夹,右键点击选择“删除”。

5. 重命名文件和文件夹- 选中要重命名的文件或文件夹,右键点击选择“重命名”。

- 输入新的名称,按回车键确认。

三、文件属性的设置1. 选中要设置属性的文件或文件夹,右键点击选择“属性”。

2. 在“常规”选项卡中,可以设置文件的只读、隐藏等属性。

3. 在“安全”选项卡中,可以设置文件的访问权限。

四、文件搜索1. 打开“开始”菜单,输入要搜索的文件名或关键字。

2. 按回车键或点击搜索结果。

实验结果与分析:一、实验结果1. 成功创建了文件和文件夹。

2. 成功复制、移动、删除、重命名了文件和文件夹。

3. 成功设置了文件属性。

4. 成功搜索到所需文件。

二、实验分析1. 通过本次实验,掌握了电脑文件的基本操作,提高了文件管理能力。

2. 熟悉了文件属性的设置方法,有助于保护文件不被误操作。

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

实验二文件系统实验报告一.实验简介本实验要求在假设的I/O 系统之上开发一个简单的文件系统,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。

用户通过create, open, read 等命令与文件系统交互。

文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0 至L-1。

I/O 系统利用内存中的数组模拟磁盘。

实际物理磁盘的结构是多维的:有柱面、磁道、扇区等概念。

I/O 系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。

逻辑块顺序编号,编号取值范围为0 至L .. 1,其中L 表示磁盘的存储块总数。

实验中,我们可以利用字符数组ldisk[L][B] 构建磁盘模型,其中B 表示每个存储块的长度。

I/O 系统从文件系统接收命令,根据命令指定的逻辑块号把磁盘块的内容读入命令指定的内存区域,或者把命令指定的内存区域内容写入磁盘块。

我设计的文件系统拥有三个用户。

二.具体说明1.文件系统的组织:磁盘的前k 个块是保留区,其中包含如下信息:位图和文件描述符。

位图用来描述磁盘块的分配情况。

位图中的每一位对应一个逻辑块。

创建或者删除文件,以及文件的长度发生变化时,文件系统都需要进行位图操作。

前k 个块的剩余部分包含一组文件描述符。

每个文件描述符包含如下信息:•文件长度,单位字节•文件分配到的磁盘块号数组。

该数组的长度是一个系统参数。

在实验中我们可以把它设置为一个比较小的数,例如3。

2.目录:我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。

除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。

目录对应0 号文件描述符。

初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。

每创建一个文件,目录文件的长度便增加一分。

目录文件的内容由一系列的目录项组成,其中每个目录项由如下内容组成:•文件名•文件描述符序号3.对文件的操作:文件系统需提供如下函数;create, destroy, open, read, write。

•create(filename): 根据指定的文件名创建新文件。

•destroy(filename): 删除指定文件。

•open(filename): 打开文件。

该函数返回的索引号可用于后续的read, write, lseek, 或close 操作。

•close(index): 关闭制定文件。

•read(index, mem_area, count): 从指定文件顺序读入count 个字节mem_area 指定的内存位置。

读操作从文件的读写指针指示的位置开始。

•write(index, mem_area, count): 把mem_area 指定的内存位置开始的count 个字节顺序写入指定文件。

写操作从文件的读写指针指示的位置开始。

•lseek(index, pos): 把文件的读写指针移动到pos 指定的位置。

pos是一个整数,表示从文件开始位置的偏移量。

文件打开时,读写指针自动设置为0。

每次读写操作之后,它指向最后被访问的字节的下一个位置。

lseek 能够在不进行读写操作的情况下改变读写指针能位置。

•directory: 列表显示所有文件及其长度。

三.实验过程创建文件create:此时显示文件中的文件:文件的删除delete:打开文件(open):文件的写操作(write):读文件(read):关闭文件(close):退出系统(exit):四.实验代码#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#define NULL 0typedef struct mdf{//MDF结构体char username[20];//用户名char filename[20];//文件名struct mdf *next;}MDF;typedef struct ufd{//UFD结构体char filename[20];//文件名int protect;//文件保护码unsigned int length;//文件长度struct ufd *next;}UFD;typedef struct afd{//AFD结构体char filename[20];//文件名int protect;//文件保护码unsigned int point;//文件读写指针struct afd *next;}AFD;MDF *pmdf;//全局链表头指针UFD *pufd;AFD *pafd;char UserUFD[20];//已经登陆成功的用户名void initMDF()//初始化MDF表{FILE *fp;pmdf= (MDF*)malloc(sizeof(MDF));MDF *p = pmdf;if((fp = fopen("MDF", "r+")) == NULL){//打开MDF文件puts("the MDF cannot open!\n");exit(1);}while (!feof(fp)){//把MDF文件中的内容装入链表p->next = (MDF*)malloc(sizeof(MDF));p = p->next;fscanf(fp, "%s", p->username);fscanf(fp, "%s", p->filename);}p->next = NULL;fclose(fp);}void printUFD()//打印MDF表{UFD *p = pufd->next;puts("文件名\t\t保护码\t\t文件长度\n");while (p){printf("%s", p->filename);printf("\t\t%d" , p->protect);printf("\t\t%d\n", p->length);p=p->next;}}void initUFD(char *name)//初始化UFD表{FILE *fp;pufd= (UFD*)malloc(sizeof(UFD));UFD *p = pufd;if((fp = fopen(name, "r+")) == NULL){puts("the UFD cannot open!\n");exit(1);}while (!feof(fp)){//建立UFD链表p->next = (UFD*)malloc(sizeof(UFD));p = p->next;fscanf(fp, "%s", p->filename);fscanf(fp, "%d", &p->protect);fscanf(fp, "%d", &p->length);fgetc(fp);}p->next = NULL;fclose(fp);}int checkuser()//检测登陆的用户名{char username[20];while(1){puts("请输入用户名: \n");scanf("%s", username);MDF *p = pmdf;while(p){if(strcmp(username, p->username) == 0){strcpy(UserUFD, p->filename);initUFD(p->filename);printUFD();return 1;}p= p->next;}puts("同户名不存在\n");}}void initAFD()//初始化AFD{pafd = (AFD*)malloc(sizeof(AFD));pafd->next = NULL;}bool create()//创建文件命令{char filename[20];UFD *p = pufd->next;AFD *pa = pafd;puts("请输入要创建的文件名: \n");scanf("%s", filename);while (p){if(strcmp(filename, p->filename) == 0){puts("此文件已经存在了!\n");return 0;}if(!p->next)break;p= p->next;}p->next = (UFD*)malloc(sizeof(UFD));p=p->next;strcpy(p->filename, filename);p->protect = 2;p->length = 0;p->next = NULL;while(pa->next){//创建文件后加入到AFD pa=pa->next;}pa->next = (AFD*)malloc(sizeof(AFD));pa = pa->next;strcpy(pa->filename ,filename);pa->protect = 2;pa->point = 0;pa->next = NULL;return 1;}bool _delete()//删除文件命令{char filename[20];puts("请输入要删除的文件名: \n");scanf("%s", filename);UFD *p = pufd;UFD *temp;while (p->next){if(strcmp(filename, p->next->filename) == 0){ temp = p->next;p->next = p->next->next;free(temp);printf("文件%s删除成功!\n", filename);return 1;}p= p->next;}puts("要删除的文件不存在!\n");return 0;}bool open()//打开文件命令{char filename[20];unsigned int protect;puts("请输入要打开的文件名: \n");scanf("%s", filename);puts("请输入要打开的文件保护类型: \n");scanf("%d", &protect);UFD *p = pufd->next;AFD *pa = pafd->next;while (pa){if(strcmp(filename, pa->filename) == 0){printf("文件%s已经打开!\n",filename);return 1;}if(!pa->next)break;pa = pa->next;}if(!pa)pa=pafd;while (p){if(strcmp(filename, p->filename) == 0){pa->next = (AFD*)malloc(sizeof(AFD));pa = pa->next;strcpy(pa->filename , p->filename);pa->protect = protect;if(protect == 1)pa->point = 0;elsepa->point = p->length;pa->next=NULL;printf("文件%s已经打开!\n",filename);return 1;}p= p->next;}puts("要打开的文件不存在!\n");return 0;}void close()//关闭文件命令{char filename[20];UFD *pu = pufd->next;puts("请输入要关闭的文件名: \n");scanf("%s", filename);AFD *p = pafd;AFD *temp;while (p&&p->next){if(strcmp(filename, p->next->filename) == 0){temp = p->next;p->next = p->next->next;if(temp->protect == 2){while(pu){if(strcmp(temp->filename, pu->filename) == 0){pu->length =temp->point;break;}pu = pu->next;}}free(temp);printf("文件%s关闭成功!\n", filename);return ;}p= p->next;}puts("要关闭的文件没有被打开!\n");}int read()//读文件命令{char filename[20];unsigned int length;AFD *p = pafd->next;puts("请输入要读的文件名: \n");scanf("%s", filename);puts("请输入要读的长度\n");scanf("%d", &length);while (p){if(strcmp(filename, p->filename) == 0){p->point += length;printf("文件%s读取成功!\n", filename);return 1;}p= p->next;}puts("读取失败文件没有打开过!\n");return 0;}int write()//写文件命令{char filename[20];unsigned int length;AFD *p = pafd->next;puts("请输入要写的文件名: \n");scanf("%s", filename);while (p){if(strcmp(filename, p->filename) == 0){if(p->protect != 2){printf("文件%s不可写!\n", filename);return 0;}puts("请输入要写的长度\n");scanf("%d", &length);p->point += length;printf("文件%s写入成功!\n", filename);return 1;}p= p->next;}puts("写入失败文件没有打开过!\n");return 0;}void destroy()//释放内存{MDF *pm = pmdf;while(pm){pmdf = pmdf->next;free(pm);pm = pmdf;}AFD *pa = pafd;while(pa){pafd = pafd->next;free(pa);pa = pafd;}UFD *pu = pufd;while(pu){pufd = pufd ->next;free(pu);pu = pufd;}}void saveUFD()//保存UFD文件{FILE *fp;UFD *p = pufd->next;if((fp = fopen(UserUFD, "w")) == NULL){ puts("the UFD cannot open!\n");exit(1);}while (p){fprintf(fp, "%s", "\n");fprintf(fp, "%s%s", p->filename,"\t\t");fprintf(fp, "%d%s", p->protect,"\t\t");fprintf(fp, "%d", p->length);p=p->next;}fclose(fp);}void exit()//推出系统{AFD *pa = pafd->next;UFD *pu = pufd->next;while(pa){if(pa->protect == 2){while(pu){if(strcmp(pa->filename, pu->filename) == 0){pu->length = pa->point;break;}pu = pu->next;}}pa =pa->next;}saveUFD();printUFD();destroy();}void operate()//命令识别{while(1){char command[20];char name[][8] = {"create", "delete", "open", "close","read", "write","exit"};puts("请输入命令: \n");scanf("%s", command);if(strcmp(command, name[0] ) == 0)create();else if(strcmp(command, name[1] ) == 0)_delete();else if(strcmp(command, name[2] ) == 0)open();else if(strcmp(command, name[3] ) == 0)close();else if(strcmp(command, name[4] ) == 0)read();else if(strcmp(command, name[5] ) == 0)write();else if(strcmp(command, name[6] ) == 0){exit();return;}elseputs("无效命令,请重新输入:\n");}}void print(){puts("文件系统\n");puts("***使用说明***:\n");puts("本文件系统共有三个用户分别是user1 user2 user3\n\系统命令有create, delete, open, close,read, write,exit\\nexit----------------------------------------退出系统"); }int main(){print();initMDF();checkuser();initAFD();operate();//命令识别return 0;}。

相关文档
最新文档