文件系统实验报告

合集下载

文件管理系统实验报告

文件管理系统实验报告

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

二、实验环境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. 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;}。

相关文档
最新文档