文件系统实验报告

合集下载

文件管理系统实验报告

文件管理系统实验报告

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

二、实验环境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. 文件系统的存储管理文件系统采用磁盘文件作为存储介质,通过文件操作实现对文件的读写。

文件系统管理实训报告

文件系统管理实训报告

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

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

本次实训以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编程实现,包括以下功能模块:- 连接模块:负责与客户端建立连接。

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

文件系统实验报告

文件系统实验报告

文件系统实验报告文件系统实验报告篇一:内核,文件系统实验报告一嵌入式系统实验报告(一) 091180083刘浩通信工程一、实验目的了解嵌入式系统的开发环境,内核的下载和启动过程;了解Linux内核源代码的目录结构及相关内容;了解Linux内核各配置选项的内容和作用;掌握Linux内核的编译过程;理解嵌入式操作系统文件系统的类型和作用;了解jffs2文件系统的优点及其在嵌入式系统中的作用;掌握busybx软件制作嵌入式文件系统的方法;掌握Linux嵌入式文件系统的挂载过程。

二、嵌入式系统开发实验1、mini和tftp(1)串口通信的硬件基础:嵌入式系统一般通过异步串行接口(UART)进行初级引导。

本实验中用到的是RS-232C标准的接口。

(2)软件结构:mini 运行mini,Ctrl+A-进入mini的cnfiguratin界面。

对串行通信接口进行配置,如串行通信口的设置,波特率、数据位等串口参数的设置。

保存好设置后以后可以不用再设置。

(3)btlader引导:给开发板加电,任意按下一个键进入btlader界面。

可以通过命令行方式进行设置,按0进入命令行模式,出现 51bard,可以设置开发板和pc机的ip地址:set myipaddr 192.168.207.113(设置开发板的ip地址),set destipaddr 192.168.207.13(设置pc机的ip地址)。

注意ip地址的设置:使其处于同一网段,并且避免和其他系统的ip发生冲突。

(4)通过btlader的主菜单可以完成很多功能,3——下载内核,4——将内核烧进flash,5——下载文件系统,6——将文件系统烧进flash,7——启动嵌入式操作系统等。

由于btlader需要从服务器上下载内核和文件系统,一般采用tftp服务。

进入/etc/xinetd.d/tftp修改配置,注意一定要关闭防火墙,否则可能导致下载时出问题。

再设置完后要重新启动tftp服务。

文件管理实验报告答案(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. 文件夹创建与删除:实验成功创建和删除了文件夹,验证了文件管理的可行性。

文件的应用实验报告(3篇)

文件的应用实验报告(3篇)

第1篇一、实验目的1. 熟悉文件的基本操作,包括创建、打开、保存、关闭等。

2. 掌握文件的编辑、格式设置、排版等基本技能。

3. 学习使用文件进行数据管理和信息整理。

4. 提高实际操作能力,为以后的工作和学习打下基础。

二、实验环境1. 操作系统:Windows 102. 文字处理软件:Microsoft Word 20163. 硬件设备:电脑、显示器、鼠标、键盘等三、实验内容1. 文件的基本操作2. 文本的编辑和格式设置3. 文档的排版和打印4. 文件夹的管理四、实验步骤1. 文件的基本操作(1)创建新文件:打开Microsoft Word,点击“空白文档”或选择合适的模板创建新文件。

(2)打开文件:点击“文件”菜单,选择“打开”,在弹出的对话框中选择要打开的文件。

(3)保存文件:点击“文件”菜单,选择“保存”,在弹出的对话框中设置文件名、保存路径和文件格式,然后点击“保存”。

(4)关闭文件:点击“文件”菜单,选择“关闭”,或者直接点击窗口右上角的关闭按钮。

2. 文本的编辑和格式设置(1)输入文本:将光标定位在文档中,使用键盘输入文本内容。

(2)选择文本:将鼠标指针移动到文本的开始位置,按住鼠标左键拖动至文本的结束位置,即可选中文本。

(3)设置字体:选中文本,点击“开始”选项卡中的“字体”下拉菜单,选择合适的字体、字号、颜色等。

(4)设置段落格式:选中文本,点击“开始”选项卡中的“段落”下拉菜单,设置段落间距、缩进、对齐方式等。

3. 文档的排版和打印(1)插入表格:点击“插入”选项卡中的“表格”,在弹出的对话框中设置表格的行列数,然后点击“确定”。

(2)插入图片:点击“插入”选项卡中的“图片”,在弹出的对话框中选择要插入的图片,然后点击“插入”。

(3)设置页眉和页脚:点击“插入”选项卡中的“页眉和页脚”,在弹出的对话框中设置页眉和页脚的内容、格式等。

(4)打印文档:点击“文件”菜单,选择“打印”,在弹出的对话框中设置打印范围、打印份数、打印设置等,然后点击“打印”。

  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;}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();}{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();return 0; }。

相关文档
最新文档