操作系统 实验报告 文件管理
- 格式:doc
- 大小:844.50 KB
- 文档页数:33
一、实验目的本次实验旨在通过设计和实现一个简单的文件管理系统,加深对文件管理原理的理解,掌握文件系统的基本操作,包括文件的创建、删除、修改、查询等,并了解文件系统的目录结构和管理机制。
二、实验环境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. 文件系统的存储管理文件系统采用磁盘文件作为存储介质,通过文件操作实现对文件的读写。
操作系统文件管理实验报告操作系统文件管理实验报告一、实验目的操作系统是计算机系统中的核心软件之一,负责管理计算机硬件资源和提供用户与计算机硬件之间的接口。
文件管理是操作系统的重要功能之一,它涉及到文件的创建、读取、写入、删除等操作。
本次实验旨在通过编写简单的文件管理程序,加深对操作系统文件管理机制的理解。
二、实验环境本次实验使用C语言编写,运行在Linux操作系统上。
实验过程中使用了gcc 编译器和Linux系统提供的文件管理函数。
三、实验内容1. 文件的创建在操作系统中,文件是存储在存储介质上的数据集合。
文件的创建是指在存储介质上分配一块空间,并为其分配一个唯一的文件名。
在本次实验中,我们使用了Linux系统提供的open函数来创建文件。
open函数接受两个参数,第一个参数是文件名,第二个参数是文件的打开模式。
通过调用open函数,我们可以在指定的路径下创建一个文件。
2. 文件的读取和写入文件的读取和写入是文件管理的核心操作。
在本次实验中,我们使用了Linux 系统提供的read和write函数来实现文件的读取和写入。
read函数接受三个参数,第一个参数是文件描述符,第二个参数是存储读取数据的缓冲区,第三个参数是要读取的数据的长度。
write函数也接受三个参数,第一个参数是文件描述符,第二个参数是要写入的数据的缓冲区,第三个参数是要写入的数据的长度。
通过调用read和write函数,我们可以实现对文件的读取和写入操作。
3. 文件的删除文件的删除是指在存储介质上释放文件占用的空间,并删除文件的相关信息。
在本次实验中,我们使用了Linux系统提供的unlink函数来删除文件。
unlink函数接受一个参数,即要删除的文件名。
通过调用unlink函数,我们可以删除指定的文件。
四、实验步骤1. 创建文件首先,我们使用open函数创建一个文件。
在调用open函数时,需要指定文件的路径和文件的打开模式。
文件的路径可以是绝对路径或相对路径,文件的打开模式可以是只读、只写、读写等。
竭诚为您提供优质文档/双击可除操作系统文件管理实验报告篇一:操作系统实验报告文件管理昆明理工大学信息工程与自动化学院学生实验报告(201—201学年第二学期)课程名称:操作系统开课实验室:年月日一、实验目的用c或c++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
二、实验原理及基本技术路线图(方框原理图)用c模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。
功能设计:helpdirexitcreate[文件名]cdir[目录名]read[文件名]close[文件名]edit[文件名]cd[目录名]attr[文件名]del[文件名]rename[文件名]显示命令帮助显示当前目录下的文件和文件夹退出系统创建文本文件创建文件夹读取一个文件最多可同时读取五个关闭一个文件编辑一个文件进子目录或者上级目录显示该文件的属性删除文件重命名编辑功能流程图删除文件流程图创建文件流程图核心算法:boolFormat(void);//格式化boolinstall(void);//装载虚拟硬盘的数据voidlogin(void);/用户登陆voidshowmenu(void);//显示功能菜单boolonAction(void);//用户选择功能并执行voidcreateFile(stringstr);//创建文件boolread(stringstr);//读取文件voideditFile(stringstr);//编辑文件voidDelete(stringstr);//删除一个文件数据结构:始地址/*inode结构体*/structinode{unsignedshortdi_tag;/*inode标识*/ /*关联文件数,当为0时表示删除文件,如一个目录至少包含两个文件:"."和".."*/constunsignedintAccounT_num=10;//用户数量/*---------常变量------*/constunsignedintbLocK_sIZe=512;//块长constunsignedintDATA_bLocK_num=512;//数据块数量constunsignedintDInoDe_sTART=4*bLocK_sIZe;//inode起始位置constunsignedintDInoDe_sIZe=512;constunsignedintDIn oDe_num=32;//inode大小//inode数量constunsignedintDATAsTART=(2+DInoDe_num)*bLocK_sIZe ;//数据区的开unsignedshortdi_number;unsignedshortdi_mode;/*存取模式:0为目录,1为文件*/unsignedshortdi_userID;/*当前inode所属用户0为根目录ID,一次下去是管理员目录、用户目录*/unsignedshortdi_access;/*访问权限0为不允许普通用户访问(公共目录),1为允许普通用户访问*/};unsignedshortdi_size;/*文件大小,目录没有大小,值为0*/unsignedshortdi_ctime;/*创建时间*/unsignedshortdi_mtime;/*最后一次修改时间*/unsignedshortdi_block[DATA_bLocK_num];/*数据块块地址编号*//**超级块***/structsuper_block{};/**账户信息**/structuser{};/**文件/目录结构**/structdirectory{unsignedshorts_inodes_count;/*文件系统中inode的总数*/unsignedshorts_blocks_count;/*数据块总数*/unsignedshorts_r_blocks_count;/*保留块总数*/unsignedshorts_free_blocks_count;//空闲块总数unsignedshorts_free_inodes_count;/*空闲的inode总数*/unsignedshorts_log_block_size;/*block的大小*/unsignedshortuser_id;//用户IDunsignedshortuser_access;//权限stringusername;stringpassword;//用户名//密码篇二:操作系统课程设计-文件管理实验报告操作系统课程实验报告20XX~20XX年度第1学期院系:学号:姓名:任课教师:成绩评定:实验一题目:文件管理完成日期:年月日1、实验目的了解文件管理的功能和任务,理解文件系统组成和特点,熟悉文件系统的访问和操作。
文件管理实验报告一、实验目的本次文件管理实验旨在深入了解和掌握文件管理的基本原理和操作方法,提高对文件系统的认识和运用能力,培养良好的文件管理习惯,以提高工作和学习的效率。
二、实验环境操作系统: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、操作系统: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. 学会使用文件管理系统进行文件操作。
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.创建文件:文件的创建是指在文件系统中创建一个新文件,并为其分配存储空间。
创建文件时需要指定文件名和文件类型,并根据需要为文件设置访问权限和属性。
操作系统文件管理实验报告操作系统文件管理实验报告1:引言本实验报告旨在详细描述操作系统文件管理实验的设计、实施和结果。
文件管理是操作系统的重要组成部分,负责对计算机中的文件进行组织、存储和访问。
本实验通过模拟文件管理的过程,加深对文件管理的理解和实践。
2:实验目的本实验的主要目的是:- 理解文件系统的概念和原理- 掌握文件的创建、读取、写入和删除等基本操作- 实施并测试文件的分配和回收算法- 评估不同的文件分配算法对系统性能的影响3:实验环境本实验的实施环境如下:- 操作系统:Windows 10- 开发环境:C++ 编程语言4:实验内容4.1 文件系统设计在文件系统设计中,首先确定文件的基本单位,例如块或扇区。
然后,定义文件控制块(FCB)结构,用于存储文件的元数据信息,如文件名、大小、创建时间、权限等。
接下来,设计文件分配表,记录系统中每个块的使用情况,用于实现文件的分配和回收。
4.2 文件的创建和删除在文件的创建过程中,首先为文件分配空间,并更新文件分配表。
然后,创建文件的FCB,并将其到目录项中。
在文件的删除过程中,首先释放文件的空间,并更新文件分配表。
然后,删除文件的FCB,并从目录项中移除。
4.3 文件的读写操作文件的读写操作是用户对文件进行读取和修改的过程。
在文件读取操作中,首先找到要读取的文件的FCB,获取文件的起始块地址,并从起始块中读取数据。
在文件写入操作中,首先找到要写入的文件的FCB,获取文件的起始块地址,并将数据写入起始块。
若文件大小超过起始块的容量,则按照一定的分配算法继续分配空间。
4.4 文件分配算法文件分配算法决定了操作系统如何管理文件的空间分配。
常用的文件分配算法包括顺序分配、分配和索引分配。
顺序分配将文件连续地存储在磁盘上,易于实现但可能产生外部碎片。
分配使用链表结构将文件存储在磁盘的不连续块中,不易产生外部碎片但可能引起存取时间增长。
索引分配使用索引表将文件存储在磁盘的不连续块中,不易产生外部碎片且存取时间相对较短,但索引表本身需要占用存储空间。
第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篇一、实验目的1. 熟悉文件和文件夹的基本操作。
2. 掌握文件的创建、复制、移动、删除等基本操作方法。
3. 学习如何使用文件管理器进行文件和文件夹的管理。
4. 了解文件属性的设置和修改方法。
二、实验环境1. 操作系统:Windows 102. 文件管理器:Windows资源管理器三、实验内容1. 文件的基本操作2. 文件夹的基本操作3. 文件属性的设置与修改4. 文件夹属性的设置与修改5. 文件夹的搜索与查找6. 文件夹的压缩与解压四、实验步骤1. 文件的基本操作(1)创建文件:在Windows资源管理器中,选择一个空白位置,右键点击,选择“新建” -> “文本文档”,然后输入文件名并按回车键。
(2)复制文件:选中需要复制的文件,右键点击,选择“复制”,然后在目标位置右键点击,选择“粘贴”。
(3)移动文件:选中需要移动的文件,右键点击,选择“剪切”,然后在目标位置右键点击,选择“粘贴”。
(4)删除文件:选中需要删除的文件,右键点击,选择“删除”,或者直接按Delete键。
2. 文件夹的基本操作(1)创建文件夹:在Windows资源管理器中,选择一个空白位置,右键点击,选择“新建” -> “文件夹”,然后输入文件夹名并按回车键。
(2)复制文件夹:选中需要复制的文件夹,右键点击,选择“复制”,然后在目标位置右键点击,选择“粘贴”。
(3)移动文件夹:选中需要移动的文件夹,右键点击,选择“剪切”,然后在目标位置右键点击,选择“粘贴”。
(4)删除文件夹:选中需要删除的文件夹,右键点击,选择“删除”,或者直接按Delete键。
3. 文件属性的设置与修改(1)选中文件,右键点击,选择“属性”,在“常规”选项卡中,可以设置文件的只读、隐藏等属性。
(2)在“安全”选项卡中,可以设置文件的安全权限,如完全控制、修改、读取等。
4. 文件夹属性的设置与修改(1)选中文件夹,右键点击,选择“属性”,在“常规”选项卡中,可以设置文件夹的只读、隐藏等属性。
第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. 文件夹创建与删除:实验成功创建和删除了文件夹,验证了文件管理的可行性。
操作系统文件管理实验报告.
操作系统文件管理实验报告是操作系统实验课程中常见的实验报告,是对学生在实验过程中所掌握的知识和技能的总结。
实验报告的主要内容包括:实验目的、实验原理、实验步骤、实验结果及分析、实验总结、实验心得体会。
实验目的:通过本次实验,学习操作系统文件管理的知识,了解文件系统的概念,并掌握文件管理的基本操作,如新建文件、复制文件、删除文件等;
实验原理:操作系统文件管理是操作系统中一项重要技术,它具有支持用户对文件进行存储、分类、保护和索引等功能。
它的核心功能是通过提供文件系统的结构和管理方法,使用户能够方便地管理文件;
实验步骤:根据实验要求,完成操作系统文件管理实验,并记录实验步骤、实验结果及分析;
实验结果及分析:根据实验结果,对操作系统文件管理实验进行分析,总结出实验中遇到的问题及解决方案;
实验总结:总结本次实验的主要内容,概括出实验的学习结果;
实验心得体会:对本次实验的学习进行反思,总结出实验的感受和收获的经验教训。
实验步骤:
用ls,ls-a命令显示目录和文件名内容Tree命令显示“树”
建立四个目录,用tree表示
Ps到abc目录下
用cp命令复制ps.txt到ps1.txt 连同目录一起复制到ABC目录
用mv命令改名
用mv命令移动文件
用rm命令删除文件删除目录
用cd命令到etc文件夹下创建几个文档
用ls命令查看
编译,创建文档
编译,查看文档
创建text.txt文档
三、实验成果提交
如上述各图所示
四、实验中遇到的难点及解决办法
使用系统调用对文件进行操作,编程实现对文件的创建、打开、关闭、读和写
五、实验体会
由于试验时间的紧迫,通过这次试验使我只是初步的学会了, Linux系统的文件管理,通过本学期的学习操作系统的过程,感觉学习的内容不足以能让我较好地使用Linux系统,感觉对他的了解还是那么少,会在以后的时间内多学习一些关于Linux系统方面的内容,努力做好和学习好Linux系统。
一、实验目的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.掌握UNIX文件系统的目录结构。
3.掌握有关UNIX文件系统操作的常用命令。
4.了解有关文件安全方面的知识。
二.实验内容1.使用pwd,cd,ls等命令浏览文件系统。
2.使用cat,cp,mv,head,tail,rm等命令查看你的文件。
3.使用ln命令进行文件的硬连接和符号连接。
4.使用find,grep命令进行文件查找和模式匹配。
5.使用chmod命令修改文件的权限。
三.实验步骤启动LINUX系统,首先以超级用户ROOT身份登录注册后(占用第一用户平台),然后以普通用户Mengqc(或其他用户名)身份登录注册后,在第二用户平台(<alt>+F2)练习文件管理有关命令.一般在[mengqc @ localhost mengqc]$提示符下键入有关命令。
1.浏览文件系统〈1〉运行pwd命令,确定你当前的工作目录(为/ home/mengqc)。
〈2〉利用以下命令显示当前工作目录的内容:(理解各字段意义。
)ls –l〈3〉运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号)ls –ai〈4〉使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。
下附本实验文件目录结构。
Mkdir subdir/根目录Ls –lBin dev home rootMengqc mlwjsubdirfa(file1)〈5〉使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。
Ls -d〈6〉使用cd命令,将工作目录改到根目录(/)上。
①用相对路径将工作目录改到根目录。
Pwd 显示当前目录为 /home/mengqcCd .. 相对路径,返回上一级。
Pwd 反馈显示当前目录为 /homeCd .. 相对路径,再返回上一级。
Pwd 反馈显示当前目录为 /Cd /home/mengqc 恢复本身目录(也可以cd↙ ).Pwd 反馈显示当前目录为 /home/mengqc②用绝对路径将工作目录改到根目录。
操作系统文件管理实验报告.
本报告旨在分析本次实验的实验内容,并根据实验结果进行探究和总结。
本次实验主要涉及操作系统文件管理,主要包括文件系统管理,文件系统操作,以及
文件属性设置。
首先,我们以某操作系统为例,在该操作系统中搭建文件系统。
通过该操
作系统的api,可以快速的实现文件的创建,查看,编辑,复制,移动等文件管理操作。
同时,该操作系统还提供了对文件属性进行修改,设置和定义文件,文件夹,文件属性,
文件权限,文件结构等文件管理相关的操作。
在实验过程中,我们首先熟悉了文件系统,完成了文件管理功能的快速搭建,并对文
件系统的操作和操作步骤进行了了解和详细学习;其次,我们尝试完成了对文件的创建,
查看,编辑,复制,移动等操作;最后,我们还进行了对文件属性的设置和修改,更好的
完成了文件管理功能。
实验结果表明,通过本次实验,我们对操作系统文件管理有了较为全面的认识,对文
件系统的操作及其步骤也有了深入的了解,可以快速的搭建文件系统,实现文件管理功能。
总而言之,本次实验通过实操方式,使我们更好的理解和掌握了操作系统文件管理的
相关知识,促使我们更加熟练的操作。
最后,期待我们能在今后的实验中更多地熟悉和掌
握操作系统相关知识,不断完善和提高自己的技能。
操作系统实验报告实验名称:文件管理专业班级:网络工程1301学号:姓名:2015 年6 月16 日实验一文件管理一、实验目的文件管理是操作系统的一个非常重要的组成部分。
学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。
二、预备知识1.VS2010的使用2.C#的学习3.文件主目录与子目录的理解三、实验内容与步骤用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。
要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。
系统能够检查打入命令的正确性,出错时能显示出错原因。
对文件必须设置保护措施,例如只能执行,允许读等。
在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。
文件的操作至少有Create、delete、open、close、read、write 等命令。
所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。
前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。
另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。
程序流程图:逻辑设计:使用线性数组表表示MFD,泛型数组表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。
物理设计://主目录private FileUser[] mfd;//当前用户private FileUser currentuser;/// <summary>/// 文件/// </summary>public class FileObject {public string filename;public int size=20;public int read=0;public int write = 0;public string author;}/// <summary>/// 文件系统用户/// </summary>public class FileUser {public string username;public List<FileObject> ufd = new List<FileObject>();public int filecount=0;}步骤详述:1、主目录及用户目录机构显示:2、当前操作用户登录:3、文件管理系统菜单:4、create命令:5、open命令:6、close命令:7、delete命令:8、read命令9、write命令10、exit命令四、实验总结通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好地巩固所学,才能提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。
昆明理工大学信息工程与自动化学院学生实验报告(201 —201 学年第二学期)课程名称:操作系统开课实验室:年月日一、实验目的用C或C++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
二、实验原理及基本技术路线图(方框原理图)用C模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。
功能设计:Help 显示命令帮助dir 显示当前目录下的文件和文件夹exit 退出系统create [文件名] 创建文本文件cdir [目录名] 创建文件夹read [文件名] 读取一个文件最多可同时读取五个close[文件名] 关闭一个文件edit [文件名] 编辑一个文件cd [目录名] 进子目录或者上级目录attr [文件名] 显示该文件的属性del [文件名] 删除文件rename [文件名] 重命名编辑功能流程图删除文件流程图创建文件流程图核心算法:bool Format(void); //格式化bool install(void); //装载虚拟硬盘的数据void login(void); /用户登陆void showMenu(void);//显示功能菜单bool onAction(void);//用户选择功能并执行void createFile(string str);//创建文件bool read(string str);//读取文件void editFile(string str);//编辑文件void Delete(string str);//删除一个文件数据结构:/*---------常变量------*/const unsigned int BLOCK_SIZE=512; //块长const unsigned int DATA_BLOCK_NUM=512; //数据块数量const unsigned int DINODE_START=4*BLOCK_SIZE; //inode起始位置const unsigned int DINODE_SIZE=512; //inode大小const unsigned int DINODE_NUM=32; //inode数量const unsigned int DATASTART=(2+DINODE_NUM)*BLOCK_SIZE; //数据区的开始地址const unsigned int ACCOUNT_NUM=10; //用户数量/*inode结构体*/struct inode{unsigned short di_tag; /*inode标识*/unsigned short di_number; /*关联文件数,当为0时表示删除文件,如一个目录至少包含两个文件:"."和".."*/unsigned short di_mode; /*存取模式:0为目录,1为文件*/unsigned short di_userID; /*当前inode所属用户0为根目录ID,一次下去是管理员目录、用户目录*/unsigned short di_access; /*访问权限0为不允许普通用户访问(公共目录),1为允许普通用户访问*/unsigned short di_size; /*文件大小,目录没有大小,值为0*/unsigned short di_ctime; /* 创建时间*/unsigned short di_mtime; /* 最后一次修改时间*/unsigned short di_block[DATA_BLOCK_NUM]; /* 数据块块地址编号*/};/**超级块***/struct super_block{unsigned short s_inodes_count; /* 文件系统中inode的总数*/unsigned short s_blocks_count; /* 数据块总数*/unsigned short s_r_blocks_count; /* 保留块总数*/unsigned short s_free_blocks_count; // 空闲块总数unsigned short s_free_inodes_count; /* 空闲的inode总数*/unsigned short s_log_block_size; /* block 的大小*/};/**账户信息**/struct user{unsigned short user_id; //用户IDunsigned short user_access; //权限string username; //用户名string password; //密码};/**文件/目录结构**/struct directory{string name; /*目录名*/unsigned short d_ino; /*目录号*/};三、所用仪器、材料(设备名称、型号、规格等)。
计算机一台四、实验方法、步骤#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream.h>struct OpenFileTable //打开文件表数据结构{long offset; // 当前文件读写指针char file_name[10]; // 文件名数组long int file_start; // 文件起始块号long int file_length; // 文件长度(字节)};struct FCB_Block //FCB数据结构{int flag; // 标志,-1表示未用,1表示文件用char file_name[10]; // 文件名数组long int file_date; // 文件建立日期long int file_time; // 文件建立时间long int file_start; // 文件起始块号long int file_length; // 文件长度(字节)};struct Super_Block // 超级块数据结构, 文件系统的分区信息,存放在0#物理块中{unsigned long int fs_totalsize; // 整个分区的总磁盘物理块数unsigned long int fs_freesize; // 分区的所有空闲磁盘物理块数unsigned int fs_blocksize; // 文件系统的物理块大小(字节)unsigned int fs_fat_start; // FAT的起始磁盘物理块号unsigned int fs_fat_size; // FAT占用的磁盘物理块数unsigned int fs_dir_start; // 根目录的起始磁盘物理块号unsigned int fs_dir_size; // 根目录占用的磁盘物理块数unsigned int fs_data_start; // 数据区起始磁盘物理块号unsigned long int fs_data_size; // 数据区的磁盘物理块数};const char DiskName[]="FileSys.dat"; //磁盘文件名char rw_buffer[512]; // 读写使用的缓冲区struct FCB_Block filefcb[130]; // 读写目录使用的数据结构struct Super_Block FsSupBlk; // 读写超级块使用的数据结构long int fat_buffer[5000]; // 读写FAT使用的缓冲区,为简化在系统启动时全部装入内存,0为空闲struct OpenFileTable OFT[16]; // 打开文件表,当前只使用OFT[0]unsigned int block_size; // 物理块大小(字节)unsigned long int total_disk_size; // 磁盘总容量(物理块数)unsigned int total_dir_size; // 目录占有的物理块数unsigned int total_fat_size; // FAT占有的物理块数long int find_fcb; // 记录读FCB块的次数FILE *fsPtr; // 模拟磁盘的文件指针/*********************** 磁盘块的申请***********************************/unsigned long int Get_Block(unsigned long int count) //分配count个物理快,返回首块指针,其它已经连接{unsigned long int tmp,firstblk,tmpcount;unsigned long int i;int flag=1;if (count > FsSupBlk.fs_freesize){ printf(" ==== 没有足够磁盘容量,不能分配!==== \n"); return 0; }tmpcount=0;for(i=FsSupBlk.fs_data_start;i<=FsSupBlk.fs_totalsize;i++)//建立分配链{if(fat_buffer[i] == 0) //文件未占有,分配{if (flag==1){ firstblk=i; flag=-1;}else{ fat_buffer[tmp]=i; }tmp=i;fat_buffer[i]=-1;tmpcount++;if(tmpcount==count) //分配完成{ FsSupBlk.fs_freesize=FsSupBlk.fs_freesize-count;//减少可分配物理块return firstblk;}}}return -1; //分配不成功}/*********************** 磁盘块的回收***********************************/void Put_Block(unsigned long int addr){ unsigned long int i,j;int count;i=addr; count=0;while(fat_buffer[i]!=-1){j=fat_buffer[i]; //下一项fat_buffer[i] = 0;count++;i=j;}fat_buffer[i] = 0;FsSupBlk.fs_freesize=FsSupBlk.fs_freesize+count+1;//增加可分配物理块return;}/*********************** 读磁盘块***********************************/void Read_Block(unsigned long int addr,char *buf){if (addr>FsSupBlk.fs_totalsize){ printf(" ==== 超出磁盘容量,不能读!==== \n"); return; }fseek(fsPtr,FsSupBlk.fs_blocksize*addr,SEEK_SET);fread(buf,512,1,fsPtr);return;}/*********************** 写磁盘块***********************************/void Write_Block(unsigned long int addr,char *buf){if (addr>FsSupBlk.fs_totalsize){ printf(" ==== 超出磁盘容量,不能写!==== \n"); return; }fseek(fsPtr,FsSupBlk.fs_blocksize*addr,SEEK_SET);fwrite(buf,512,1,fsPtr);return;}/*********************** 格式化磁盘***********************************/void Real_Format(){unsigned long int bcount;long int fatval,i;char *c;//更改系统超级块信息FsSupBlk.fs_totalsize=total_disk_size;FsSupBlk.fs_blocksize=block_size;FsSupBlk.fs_dir_start=1;FsSupBlk.fs_dir_size=total_dir_size;FsSupBlk.fs_fat_start=total_dir_size+1;FsSupBlk.fs_fat_size=total_fat_size;FsSupBlk.fs_data_start=FsSupBlk.fs_fat_start+FsSupBlk.fs_fat_size;FsSupBlk.fs_data_size = FsSupBlk.fs_totalsize - FsSupBlk.fs_dir_size - FsSupBlk.fs_fat_size-1;FsSupBlk.fs_freesize= FsSupBlk.fs_data_size;//初始化目录for(i=0;i<128;i++) filefcb[i].flag=-1; //为-1表示FCB未使用fseek(fsPtr,512L,SEEK_SET);fwrite(&filefcb[0],sizeof(struct FCB_Block),128,fsPtr);//初始化FATfatval=FsSupBlk.fs_fat_start*512;fseek(fsPtr,fatval,SEEK_SET); //定位文件指针bcount=FsSupBlk.fs_fat_size+FsSupBlk.fs_dir_size+1;for(i=0;i<bcount;i++) fat_buffer[i]=-1; //标记已经使用的磁盘数据块,即FAT区、目录区和启动区for(;i<FsSupBlk.fs_totalsize;i++) fat_buffer[i]=0; //为0表示为空的物理快fwrite(&fat_buffer[0],sizeof(long int),FsSupBlk.fs_totalsize,fsPtr);//初始化数据区for(i=0;i<512;i++) rw_buffer[i]=' ';//缓冲区清空for(i=FsSupBlk.fs_data_start;i<FsSupBlk.fs_totalsize;i++) Write_Block(i,rw_buffer); //缓冲区写入第i块}/***********************新建系统磁盘文件***********************************/void Create_Disk(){long int i;unsigned long int total;fsPtr=fopen(DiskName,"wb+");if(fsPtr==NULL){printf(" 不能建立磁盘所需的文件!\n");exit(0);}// 建立磁盘文件total=total_disk_size;for(i=0;i<total;i++) //建立大小为total的磁盘文件fwrite(rw_buffer,512,1,fsPtr);fclose(fsPtr);fsPtr=fopen(DiskName,"rb+");Real_Format();return;}/***********************读写系统超级块信息***********************************/void Read_Boot() //读取磁盘超级块数据信息{rewind(fsPtr);fread(&FsSupBlk,sizeof(struct Super_Block),1,fsPtr);return;}void FileBoot() //超级块数据信息存盘{rewind(fsPtr);fwrite(&FsSupBlk,sizeof(struct Super_Block),1,fsPtr);return;}/***********************FAT操作***********************************/void LoadFat() //装载全部FAT到内存{fseek(fsPtr,FsSupBlk.fs_fat_start*512,SEEK_SET);fread(fat_buffer,sizeof(long int),FsSupBlk.fs_totalsize ,fsPtr);return;}void SaveFat() //FAT到文件FAT区{fseek(fsPtr,FsSupBlk.fs_fat_start*512,SEEK_SET);fwrite(fat_buffer,sizeof(long int),FsSupBlk.fs_totalsize,fsPtr);return;}/***********************显示超级块信息***********************************/ void boot_dis(){printf("FsSupBlk.fs_totalsize=%ld\n",FsSupBlk.fs_totalsize);printf("FsSupBlk.fs_blocksize=%d\n",FsSupBlk.fs_blocksize);printf("FsSupBlk.fs_dir_start=%d\n",FsSupBlk.fs_dir_start);printf("FsSupBlk.fs_dir_size=%d\n",FsSupBlk.fs_dir_size);printf("FsSupBlk.fs_fat_start=%d\n",FsSupBlk.fs_fat_start);printf("FsSupBlk.fs_fat_size=%d\n",FsSupBlk.fs_fat_size);printf("FsSupBlk.fs_data_start=%d\n",FsSupBlk.fs_data_start);printf("FsSupBlk.fs_data_size=%ld\n",FsSupBlk.fs_data_size);printf("FsSupBlk.fs_freesize=%ld\n",FsSupBlk.fs_freesize);}/***********************系统初始化***********************************/void Sys_Init() //初始化{fsPtr=fopen(DiskName,"rb+");if(fsPtr == NULL) Create_Disk();Read_Boot();//boot_dis();LoadFat();return;}/***********************显示操作***********************************/void dir() //显示目录下的文件{int i,countFile=0;char str[16];long int n,pos_dir,pos_fat;cout<<endl;pos_dir=FsSupBlk.fs_dir_start*512;pos_fat=FsSupBlk.fs_fat_start*512;fseek(fsPtr,pos_dir,SEEK_SET);while(ftell(fsPtr)<pos_fat){fread(&filefcb[0],sizeof(struct FCB_Block),16 ,fsPtr);for(i=0;i<16;i++)if(filefcb[i].flag == 1) //文件占有{countFile++;n = filefcb[i].file_length;printf(" %-15s<%s>%15d bytes\n", filefcb[i].file_name,"file",n);}}cout<<endl;printf(" 总共有%d 个文件\n",countFile);printf(" 系统总共有%ld 个物理块可用\n\n",FsSupBlk.fs_freesize);}/*************************查找文件*******************************/ //查找文件,文件存在返回当前FCB数组下标,否则返回-1int Find_File(char *filename){int i;long int pos_dir,pos_fat;pos_dir=FsSupBlk.fs_dir_start*512;pos_fat=FsSupBlk.fs_fat_start*512;find_fcb=0;fseek(fsPtr,pos_dir,SEEK_SET);while(ftell(fsPtr)<pos_fat){ find_fcb++;fread(&filefcb[0],sizeof(struct FCB_Block),16 ,fsPtr);for(i=0;i<16;i++)if(filefcb[i].flag!=-1){ if(strcmp(filename,filefcb[i].file_name) == 0) return i;} //文件存在}return -1;}/*************************创建文件*******************************/void create(char *fname,long int num) //在当前目录下创建一个名字为str的文件,长度为num{int i,j; //true表示没有与该名字重名的文件int tempnode;long int pos_dir,getnum=0;unsigned long int blkcount;blkcount= num/512+1; //计算需要的物理块if(FsSupBlk.fs_freesize < blkcount) //磁盘没有足够空间{printf("\n 磁盘没有足够空间,不能建立!\n\n");return;}tempnode=Find_File(fname);if (tempnode!=-1) //表示文件存在{ printf("\n 文件已经存在,不需要建立!\n\n"); return;} // 建立文件的处理pos_dir=FsSupBlk.fs_dir_start*FsSupBlk.fs_blocksize; fseek(fsPtr,pos_dir,SEEK_SET); //定位到目录区for(i=0; i<FsSupBlk.fs_dir_size; i++){//Read_Block(i+FsSupBlk.fs_dir_start,(char *)filefcb);fread(&filefcb[0],sizeof(struct FCB_Block),16 ,fsPtr);for(j=0;j<16;j++)if(filefcb[j].flag == -1) //找到空目录项{// 分配空间, 标记FCB数据项,并将FCB写磁盘getnum=Get_Block(blkcount);if(getnum==-1){ printf("不能分配存储空间\n");return;}filefcb[j].file_start=getnum;filefcb[j].flag = 1;filefcb[j].file_length=num;strcpy(filefcb[j].file_name,fname);//filefcb[].file_time=//filefcb[].file_date=// 改变磁盘FCB值pos_dir=pos_dir+sizeof(struct FCB_Block)*(i*16+j);fseek(fsPtr,pos_dir,SEEK_SET); //定位到目录区的FCB项fwrite(&filefcb[j],sizeof(struct FCB_Block),1 ,fsPtr);//Write_Block(i+FsSupBlk.fs_dir_start,(char *)filefcb);printf(" 文件占用了%d 个物理块\n",blkcount);printf(" 系统还有%ld 个物理块可用\n\n",FsSupBlk.fs_freesize);return;}}//没有FCB项,不能建立文件cout<<"当前没有足够的目录区,不能建立文件! "<<endl;return;}/*************************格式化*******************************/void format(){char ch;cout<<"\n 真希望格式化磁盘吗?(y/n) ";cin>>ch;if(ch=='y'||ch=='Y'){Real_Format();printf("\n Format Successful!\n\n");}}/****************************删除文件操作**************************************/void del(char *fname){long int tempnode;long int pos_dir;tempnode=Find_File(fname);if (tempnode==-1) //表示文件不存在{ printf("\n 文件不存在,不能删除!\n\n"); return;}// 删除文件的处理Put_Block(filefcb[tempnode].file_start); // 释放文件存储空间filefcb[tempnode].flag =-1; // 标记FCB项可用// 修改的FCB项写回磁盘pos_dir=FsSupBlk.fs_dir_start*FsSupBlk.fs_blocksize+((find_fcb-1)*16+tempnode)*siz eof(struct FCB_Block);fseek(fsPtr,pos_dir,SEEK_SET); //定位到目录区fwrite(&filefcb[tempnode],sizeof(struct FCB_Block),1 ,fsPtr);return;}/*************************写文件*******************************/void write(char *fname ,int num)//写文件,仅实现在文件尾部填加内容,并限制在512个字节内{int tempnode;int i,j,x;int rescount;long int pos_dir;if (num > 512){printf("\n 不能写大于512字节的数据!\n\n");return;}tempnode=Find_File(fname);if (tempnode==-1) //表示文件不存在{printf("\n 文件不存在,不能写!\n\n");return;}// 写文件的处理char *string=new char [num]; //申请空间for(i=0;i<num;i++){cin>>string[i];}rescount=filefcb[tempnode].file_length % FsSupBlk.fs_blocksize; if (num> FsSupBlk.fs_blocksize-rescount){if (FsSupBlk.fs_freesize<1){printf("\n 文件系统没有足够空间,不能写!\n\n");return;}}for(j=filefcb[tempnode].file_start;fat_buffer[j]!=-1;j=fat_buffer[j]); Read_Block(j,rw_buffer);if (num<= FsSupBlk.fs_blocksize-rescount){for(i=0;i<num;i++) rw_buffer[rescount+i]=string[i];Write_Block(j,rw_buffer);}else{for(i=0;i<FsSupBlk.fs_blocksize-rescount;i++)rw_buffer[rescount+i]=string[i];Write_Block(j,rw_buffer);fat_buffer[j]=Get_Block(1);j=fat_buffer[j];for(x=0;x<FsSupBlk.fs_blocksize;x++) rw_buffer[x]=' ';for(x=0;x<num-(FsSupBlk.fs_blocksize-rescount);x++) rw_buffer[x]=string[i+x];Write_Block(j,rw_buffer);}//delete []string;// 修改FCB项并写回磁盘filefcb[tempnode].file_length+=num; // 增加文件的长度pos_dir=FsSupBlk.fs_dir_start*FsSupBlk.fs_blocksize+((find_fcb-1)*16+tempnode)*siz eof(struct FCB_Block);fseek(fsPtr,pos_dir,SEEK_SET); //定位到目录区fwrite(&filefcb[tempnode],sizeof(struct FCB_Block),1 ,fsPtr);cin.ignore(10000,'\n'); //清除输入流缓冲区cout<<endl<<"=================== 写文件完成!=============="<<endl;return;}void copyFcbtoOft(int fcbpos){OFT[0].offset =0;strcpy(OFT[0].file_name,filefcb[fcbpos].file_name);OFT[0].file_start = filefcb[fcbpos].file_start ;OFT[0].file_length= filefcb[fcbpos].file_length ;}/*************************读文件*******************************/void read(char *fname,long start,int count)//读文件,限制在512个字节内{int tempnode;int stblknum,offset;int dspnum;long i,j,x;tempnode=Find_File(fname);if (tempnode==-1) //表示文件不存在{ printf("\n 文件不存在,不能读!\n\n");return; }if (start > filefcb[tempnode].file_length) //读的数据超出文件范围{ printf("\n 超出文件范围,不能读!\n\n");return; }// 读文件的处理printf("\n========================================\n"); stblknum=start/FsSupBlk.fs_blocksize+1; // 起始物理块offset=start%FsSupBlk.fs_blocksize; // 起始物理块的偏移量if(start+count>filefcb[tempnode].file_length )count= filefcb[tempnode].file_length-start;for(i=filefcb[tempnode].file_start,j=1;j<stblknum;j++)i=fat_buffer[i];Read_Block(i,rw_buffer);if(start+count>filefcb[tempnode].file_length )count= filefcb[tempnode].file_length-start;if(count<=FsSupBlk.fs_blocksize-offset){for(j=0;j<count;j++) cout<<rw_buffer[j+offset];}else{for(j=0;j<FsSupBlk.fs_blocksize-offset;j++) cout<<rw_buffer[j+offset];dspnum=(count-(FsSupBlk.fs_blocksize-offset))/FsSupBlk.fs_blocksize+1;for(j=0;j<dspnum-1;j++){i=fat_buffer[i];Read_Block(i,rw_buffer);for(x=0;x<FsSupBlk.fs_blocksize;x++)cout<<rw_buffer[x];}i=fat_buffer[i];Read_Block(i,rw_buffer);x=(count-(FsSupBlk.fs_blocksize-offset))%FsSupBlk.fs_blocksize;for(j=0;j<x;j++) cout<<rw_buffer[x];}cout<<endl<<"============= 读文件完成!================"<<endl;return;}/*************************显示帮助*******************************/void display_help(){printf(" 写文件wf filename size \n");printf(" 读文件rf filename start size \n");printf(" 删除文件df filename \n");printf(" 建立文件cf filename size \n");printf(" 显示文件dir \n");printf(" 磁盘格式化format \n");printf(" 退出文件系统quit \n\n");}/*************************命令解释*******************************/void CmdShell() //全部命令的解释执行过程{int j;int parameter; // 记录命令行参数个数int len; // 输入的命令行长度char string[50]; // 输入的命令行字符串char *str[4]; // 分解出的命令行参数bool flag; // 标志cout<<"\n 输入help查看所有命令"<<endl<<endl;while(1){printf("c:\>"); //输出系统提示符gets(string);len = strlen(string);//命令行信息的解析过程for(parameter = 0, flag = true, j = 0; j<len ; j++){if(string[j] == ' ') //读到输入字符为空格时,输出回车{ flag = true; string[j] = '\0'; }elseif(flag){ flag = false;str[parameter++] = &string[j]; //分解出的命令,以空格为各参数的分割符} //第一个为操作命令,其他为参数}strlwr(str[0]);// 根据操作命令执行不同的过程if(!strcmp("cf",str[0])) // 创建文件{if(parameter != 3)printf(" 格式不正确,请重新输入!\n ");elsecreate(str[1],atol(str[2])); } // 创建一个名字为str[0]大小为str[2]的文件else if(!strcmp("df",str[0])) // 删除文件{ if(parameter != 2)printf(" 格式不正确,请重新输入!\n ");else//disfat();}del(str[1]); } //删除文件str[1]else if(!strcmp("dir",str[0])) //显示文件命令dir();else if(!strcmp("help",str[0]))display_help();else if(!strcmp("format",str[0]))format();else if(!strcmp("wf",str[0])) //写文件{ if(parameter != 3)printf(" 格式不正确,请重新输入!\n ");elsewrite(str[1],atol(str[2])); }else if(!strcmp("rf",str[0])) //读文件内容{ if(parameter != 4)printf(" 格式不正确,请重新输入!\n");elseread(str[1],atol(str[2]),atol(str[3])); }else if(!strcmp("quit",str[0])) //退出{ SaveFat(); fclose(fsPtr); exit(0);}elseif (parameter >0 ) cout<<"命令错误!"<<endl;}}/************************* 主过程*******************************/void main(){block_size=512; // 物理块大小512字节total_disk_size=4096; // 磁盘总容量为4096块total_dir_size=16; // 目录占有的物理块数为16块total_fat_size=32; // FAT占有的物理块数为32块Sys_Init(); //初始化磁盘系统CmdShell(); //命令解释过程}五、实验过程原始记录(数据、图表、计算等)六、实验结果、分析和结论(误差分析与数据处理、成果总结等。