操作系统实验三__文件管理
- 格式:doc
- 大小:375.00 KB
- 文档页数:35
操作系统文件管理实验报告操作系统文件管理实验报告一、实验目的操作系统是计算机系统中的核心软件之一,负责管理计算机硬件资源和提供用户与计算机硬件之间的接口。
文件管理是操作系统的重要功能之一,它涉及到文件的创建、读取、写入、删除等操作。
本次实验旨在通过编写简单的文件管理程序,加深对操作系统文件管理机制的理解。
二、实验环境本次实验使用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函数时,需要指定文件的路径和文件的打开模式。
文件的路径可以是绝对路径或相对路径,文件的打开模式可以是只读、只写、读写等。
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。
实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。
三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。
在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。
通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。
2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。
通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。
在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。
(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。
通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。
2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。
在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。
(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。
操作系统实验报告6一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关技术,通过实际操作和观察,增强对操作系统工作原理的理解,并提高解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,实验工具包括 Visual Studio 2019 等。
三、实验内容(一)进程管理实验1、创建多个进程,并观察它们的运行状态和资源占用情况。
通过编写简单的C++程序,使用Windows API 函数创建多个进程。
在程序中,设置不同的进程优先级和执行时间,观察操作系统如何调度这些进程,以及它们对 CPU 使用率和内存的影响。
2、进程间通信实现了进程间的管道通信和消息传递。
通过创建管道,让两个进程能够相互交换数据。
同时,还使用了 Windows 的消息机制,使进程之间能够发送和接收特定的消息。
(二)内存管理实验1、内存分配与释放使用 C++的动态内存分配函数(如`malloc` 和`free`),在程序运行时动态申请和释放内存。
观察内存使用情况,了解内存碎片的产生和处理。
2、虚拟内存管理研究了 Windows 操作系统的虚拟内存机制,通过查看系统的性能监视器,观察虚拟内存的使用情况,包括页面文件的大小和读写次数。
(三)文件系统实验1、文件操作进行了文件的创建、读取、写入、删除等基本操作。
通过编写程序,对不同类型的文件(如文本文件、二进制文件)进行处理,了解文件系统的工作原理。
2、目录操作实现了目录的创建、删除、遍历等功能。
了解了目录结构在文件系统中的组织方式和管理方法。
四、实验步骤(一)进程管理实验步骤1、打开 Visual Studio 2019,创建一个新的 C++控制台项目。
2、在项目中编写代码,使用`CreateProcess` 函数创建多个进程,并设置它们的优先级和执行时间。
3、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。
文件管理实验报告一、实验目的文件管理是操作系统的重要组成部分,本次实验的目的在于深入理解文件管理的基本概念和原理,掌握文件的存储、组织、检索和访问等操作,熟悉常见的文件系统结构和功能,提高对文件管理系统的实际操作能力和问题解决能力。
二、实验环境1、操作系统:Windows 102、开发工具:Microsoft Visual Studio 2019三、实验内容1、文件的创建、删除和重命名使用 C++或 Python 编程语言,通过系统调用或相关库函数实现文件的创建、删除和重命名操作。
观察文件在操作系统中的实际表现,如文件的出现和消失,文件名的更改等。
2、文件的读写操作实现对文本文件和二进制文件的读写操作,包括读取文件的全部内容、按行读取文件、向文件写入数据等。
分析不同读写模式(如只读、只写、读写等)对文件操作的影响。
3、文件属性的获取和修改获取文件的基本属性,如文件大小、创建时间、修改时间、访问权限等。
尝试修改文件的部分属性,如只读属性、隐藏属性等,观察修改后的效果。
4、文件目录的操作创建、删除和遍历目录。
实现文件在不同目录之间的移动和复制操作。
四、实验步骤1、文件的创建、删除和重命名以下是使用 Python 实现文件创建、删除和重命名的示例代码:```pythonimport os创建文件file_path ="exampletxt"with open(file_path, 'w') as f:fwrite("This is a test file")删除文件osremove(file_path)重命名文件new_file_path ="renamed_exampletxt"osrename(file_path, new_file_path)```运行代码后,可以在指定的目录中观察到文件的创建、删除和重命名操作的结果。
2、文件的读写操作读取文本文件的示例代码:```pythonfile_path ="text_filetxt"with open(file_path, 'r') as f:content = fread()print(content)```按行读取文本文件的示例代码:```pythonfile_path ="text_filetxt"with open(file_path, 'r') as f:for line in f:print(linestrip())```写入数据到文件的示例代码:```pythonfile_path ="outputtxt"with open(file_path, 'w') as f:fwrite("New data written to file")```分别运行上述代码,观察文件的读写结果。
操作系统文件管理系统模拟实验在计算机科学中,操作系统是一种系统软件,负责管理计算机硬件和软件资源,并为用户和应用程序提供接口。
文件管理系统是操作系统的一个重要组成部分,它负责管理计算机系统中的文件和目录,以及提供对它们的访问和操作。
本次实验旨在模拟操作系统中文件管理系统的基本功能和操作。
我们将使用一个虚拟的文件系统,通过命令行界面来模拟用户与文件系统的交互。
以下是实验的具体内容和步骤:1. 创建虚拟文件系统首先,我们需要创建一个虚拟的文件系统。
文件系统由文件和目录组成,可以通过树状结构来表示。
我们可以使用一个数据结构来模拟文件系统的存储和管理。
2. 初始化文件系统在开始操作文件系统之前,我们需要初始化文件系统。
这包括创建根目录和设置当前目录为根目录。
3. 文件和目录的创建与删除文件和目录是文件系统的基本单位。
我们可以通过命令来创建和删除文件和目录。
例如,使用"mkdir"命令创建一个目录,使用"touch"命令创建一个空文件,使用"rm"命令删除文件或目录。
4. 文件和目录的访问权限文件和目录可以设置不同的访问权限,以保护文件系统的安全性。
我们可以使用"chmod"命令来修改文件或目录的权限。
权限通常包括读、写和执行权限。
5. 文件和目录的重命名和移动我们可以使用"mv"命令来重命名文件或目录,使用"cp"命令来复制文件或目录,使用"mv"命令来移动文件或目录。
6. 文件和目录的查找和显示我们可以使用"ls"命令来显示当前目录下的文件和目录,使用"cd"命令来切换当前目录,使用"pwd"命令来显示当前目录的路径。
此外,我们还可以使用"find"命令来查找文件或目录。
7. 文件和目录的读写操作文件可以被读取和写入。
实验三Windows XP文件管理与系统配置一、实验目的●进一步熟练掌握Windows窗口基本操作。
●掌握资源管理器的基本操作。
●掌握文件及文件夹管理和磁盘管理的操作。
●掌握Windows系统配置。
●掌握Windows XP的常用命令。
二、知识要点及预备知识1.Windows XP中文件或文件夹的命名规则文件名的格式:主文件名.扩展名其中主文件名1-255个字符;扩展名1-3个字符。
另外文件名不能包含以下9个字符:/ | \ * ? < > " :255字符创建文件名2.Windows XP资源管理器资源管理器是一个用于文件管理的实用程序,它可以迅速的提供关于磁盘文件的信息,并可以将文件分类,清晰的显示文件夹的结构及内容。
资源管理器工作区分为左右两个部分。
3.Windows XP文件和文件夹管理Windows XP采用树型结构管理文件或文件夹,可通过创建、删除、复制、移动文件和文件夹,或通过更改文件和文件夹属性以及管理共享文件夹等方式实现对文件及文件夹的管理。
以下是在“我的电脑”或“资源管理器”中创建、复制、移动和删除文件或文件夹的几种常用方法。
(1)文件或文件夹的创建①单击[文件]/[新建] ->“文件夹”菜单命令或某一文件类型菜单命令。
②在工作区的空白处单击鼠标右键弹出快捷菜单,再单击[新建] ->“文件夹”菜单命令或某一文件类型菜单命令。
③利用记事本等应用程序创建某一类型的文件。
(2)创建快捷方式①单击[文件]/[新建]->”快捷方式”。
②用鼠标右键将目标文件或文件夹拖动到需创建快捷方式的地方,再选择“在当前位置创建快捷方式”菜单命令。
③鼠标右键单击某一文件或文件夹,在弹出快捷菜单中选择“发送”->”桌面快捷方式”菜单命令。
(3)复制文件或文件夹①不同磁盘之间:直接通过鼠标拖动,此时鼠标有“+”。
②选定源文件或文件夹,选择[编辑]/ [复制]命令,在目的窗口选择[编辑]/[粘贴]命令。
《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。
实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。
三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。
在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。
2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。
在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。
3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。
在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。
4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。
在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。
四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。
(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。
(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。
操作系统实验报告文件管理文件管理是操作系统的重要功能之一,它负责对计算机系统中的文件进行组织、存储和访问。
文件管理系统的设计和实现对操作系统的性能和可靠性起着重要作用。
本文将介绍文件管理的基本概念、文件系统的组织方式和文件的操作方法。
一、文件管理的概念文件是计算机系统中存储和管理数据的基本单位,它可以是文本、图像、音频、视频等各种类型的数据。
文件管理的目标是实现对文件的有效组织和高效访问,使得用户和应用程序可以方便地读取、写入和删除文件。
文件管理系统主要包括以下几个方面:1.文件组织方式:文件可以按照不同的方式进行组织,包括顺序文件、索引文件、哈希文件等。
不同的组织方式有不同的优势和适用场景,可以根据实际需要选择合适的组织方式。
2.文件存储管理:文件在存储设备上的存储方式包括连续存储、链式存储和索引存储等。
不同的存储方式对文件的读写性能和空间利用率有影响,需要根据实际情况进行选择。
3.文件访问控制:对文件的访问需要进行权限控制,保证只有合法的用户或应用程序可以读取和写入文件。
文件访问控制主要通过访问权限和文件属性来实现。
二、文件系统的组织方式1.单级目录结构:这是最简单的文件系统组织方式,所有文件都位于同一个目录下。
由于没有目录的嵌套结构,文件的查找和管理比较简单,但是对于大量文件的管理不够灵活。
2.层次目录结构:该方式通过目录的嵌套结构来组织文件,可以形成一棵树状结构。
目录可以包含子目录和文件,用户可以通过目录路径来访问文件。
这种组织方式可以更好地组织大量的文件,提高文件的查找效率。
3.索引目录结构:该方式使用一个索引表来记录文件的位置和属性信息,用户通过索引表中的索引来访问文件。
索引表可以根据文件名、文件类型等信息快速定位到文件的位置,提高访问效率。
此外,索引表还可以支持对文件的动态增删改查操作。
三、文件的操作方法1.创建文件:文件的创建是指在文件系统中创建一个新文件,并为其分配存储空间。
创建文件时需要指定文件名和文件类型,并根据需要为文件设置访问权限和属性。
实验三Linux操作系统安全一、实验目的及要求(一)实验目的通过实验熟悉Linux环境下的用户管理、进程管理以及文件管理的相关操作命令。
掌握linux操作系统中相关的系统安全配置方法,建立linux操作系统的基本安全框架。
(二)实验要求根据实验中介绍的Linux操作系统的各项安全性实验要求,详细观察记录设置前后系统的变化,给出分析报告。
使用RPM对系统的软件进行管理,验证系统内软件的完整性,并分析结果。
试比较Linux下网了服务安全设置与Windows下安全设置异同。
二、实验环境安装Red hat9.0操作系统的计算机一台三、实验内容1、账户和口令安全2、文件系统管理安全3、查看和更改PAM模块设置4、RPM软件管理5、系统安全配置四、实验步骤任务一账户和口令安全1、查看和添加账户(1)在X_Windows窗口中单击鼠标右键,选择“信件中断”,输入下面的命令行:[root@localhost root]#useradd mylist利用useradd命令新建名为mylist的新账户。
(2)输入命令行:[root@localhost root]#cat/etc/shadow利用cat查看系统中的账户列表。
用su命令切换到新建的账户,重复步骤(2),检查shadow文件的权限设置是否安全。
设置安全时,普通用户mylist应该没有查看该系统文件的权限。
在终端中出现如下的提示:Cat:/etc/shadow:权限不够2、添加和更改密码(1)在终端输入[root@localhost root]#passwd mylist为新建账户添加密码。
注意:系统管理员无需输入原来密码即可以利用passwd命令添加或改变任意用户的密码,但普通用户只能改变自己的密码。
(2)输入后依次出现如下提示:Changjing passwd for user mylist.New passwd:Retype new passwd:Passwd:all authentication tokens updated susscessfully.输入密码,Linux系统不会将输入显示出来。
《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。
二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。
同时,实现进程的正常终止和异常终止,并分析其对系统的影响。
2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。
通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。
(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。
2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。
(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。
四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。
(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。
(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。
2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。
(2)创建多个进程,模拟对共享资源的并发访问。
(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。
(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。
操作系统- 形考任务-实验名称: Linux文件管理Array实验名称: Linux文件管理实验目的:1、掌握文件管理的基本内容和原理;2、了解文件和目录操作的系统调用用户接口;实验要求:熟悉Linux文件目录管理各种功能命令1、用root账号登录到终端,使用pwd命令查看当前目录2、用cd命令将当前目录切换到“/”目录下3、使用ls明令查看Linux的目录结构,了解各目录存放与系统相关的文件4、使用 cat、more、head、tail等命令显示 /etc/init.d/irqbalance文件内容(a) cat的使用(b) more的使用(c) head的使用(d) tail的使用5、使用grep 命令在/etc/init.d/irqbalance文件中查询“Star”字符串6、使用find 命令查找 /目录下所有以main 开头的文件7、使用 cp 命令将/etc目录下的inittab文件拷贝到/root目录下8、使用 sort 和uniq 命令对 /root目录下的inittab文件排序后输出其结果9、统计inittab文件的字节数、行数、字数10、用mkdir命令在/root目录下创建一个test目录11、将test目录改名为test212、删除test2linux中文件管理对象有超级块对象(superblock),索引结点对象(inode),数据块对象(datablock),目录块对象(diredtory block)。
其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置。
但是索引结点中不包括文件的名字,文件名是放在目录块里的。
目录块里包含有文件的名字以及此文件的索引结点编号。
操作系统实验报告三一、实验目的本次操作系统实验的目的在于深入了解操作系统的进程管理、内存管理和文件系统等核心功能,通过实际操作和观察,增强对操作系统原理的理解和掌握,提高解决实际问题的能力。
二、实验环境本次实验在 Windows 10 操作系统环境下进行,使用了 Visual Studio 2019 作为编程工具,并借助了相关的操作系统模拟软件和调试工具。
三、实验内容与步骤(一)进程管理实验1、创建多个进程使用 C++语言编写程序,通过调用系统函数创建多个进程。
观察每个进程的运行状态和资源占用情况。
2、进程同步与互斥设计一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。
分析在不同并发情况下程序的执行结果,理解进程同步的重要性。
(二)内存管理实验1、内存分配与回收实现一个简单的内存分配算法,如首次适应算法、最佳适应算法或最坏适应算法。
模拟内存的分配和回收过程,观察内存的使用情况和碎片产生的情况。
2、虚拟内存管理了解 Windows 操作系统的虚拟内存机制,通过查看系统性能监视器观察虚拟内存的使用情况。
编写程序来模拟虚拟内存的页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法等。
(三)文件系统实验1、文件操作使用 C++语言对文件进行创建、读写、删除等操作。
观察文件在磁盘上的存储方式和文件目录的结构。
2、文件系统性能测试对不同大小和类型的文件进行读写操作,测量文件系统的读写性能。
分析影响文件系统性能的因素,如磁盘碎片、缓存机制等。
四、实验结果与分析(一)进程管理实验结果1、创建多个进程在创建多个进程的实验中,通过任务管理器可以观察到每个进程都有独立的进程 ID、CPU 使用率、内存占用等信息。
多个进程可以并发执行,提高了系统的资源利用率。
2、进程同步与互斥在生产者消费者问题的实验中,当使用正确的信号量机制时,生产者和消费者能够协调工作,不会出现数据不一致或死锁的情况。
操作系统文件管理实验报告.
本报告旨在分析本次实验的实验内容,并根据实验结果进行探究和总结。
本次实验主要涉及操作系统文件管理,主要包括文件系统管理,文件系统操作,以及
文件属性设置。
首先,我们以某操作系统为例,在该操作系统中搭建文件系统。
通过该操
作系统的api,可以快速的实现文件的创建,查看,编辑,复制,移动等文件管理操作。
同时,该操作系统还提供了对文件属性进行修改,设置和定义文件,文件夹,文件属性,
文件权限,文件结构等文件管理相关的操作。
在实验过程中,我们首先熟悉了文件系统,完成了文件管理功能的快速搭建,并对文
件系统的操作和操作步骤进行了了解和详细学习;其次,我们尝试完成了对文件的创建,
查看,编辑,复制,移动等操作;最后,我们还进行了对文件属性的设置和修改,更好的
完成了文件管理功能。
实验结果表明,通过本次实验,我们对操作系统文件管理有了较为全面的认识,对文
件系统的操作及其步骤也有了深入的了解,可以快速的搭建文件系统,实现文件管理功能。
总而言之,本次实验通过实操方式,使我们更好的理解和掌握了操作系统文件管理的
相关知识,促使我们更加熟练的操作。
最后,期待我们能在今后的实验中更多地熟悉和掌
握操作系统相关知识,不断完善和提高自己的技能。
操作系统原理实验操作系统是计算机系统中最核心的部分之一,它负责管理和控制计算机的硬件和软件资源,为用户提供一个良好的工作环境。
操作系统原理实验是计算机相关专业的学生必修课程之一,通过实验学习,可以更深入地理解操作系统的原理和工作机制,提高对操作系统的理解和应用能力。
实验一,进程管理。
进程是操作系统中最基本的概念之一,它是程序执行的基本单位。
在进程管理实验中,我们可以学习到进程的创建、调度、同步和通信等内容。
通过编写程序模拟进程的创建和调度过程,可以更直观地理解操作系统是如何管理进程的。
实验二,内存管理。
内存管理是操作系统中的重要内容之一,它负责管理计算机的内存资源,包括内存的分配与回收、内存的保护和共享等。
在内存管理实验中,我们可以学习到内存分配算法、地址转换技术以及虚拟内存的实现原理。
通过编写程序模拟内存分配和回收的过程,可以更好地理解操作系统是如何管理内存的。
实验三,文件系统。
文件系统是操作系统中负责管理存储设备上的文件和目录的部分,它提供了对文件的读写和管理功能。
在文件系统实验中,我们可以学习到文件的组织结构、文件的存储管理和文件的访问控制等内容。
通过编写程序模拟文件的创建、读写和删除过程,可以更深入地理解操作系统是如何管理文件系统的。
实验四,设备管理。
设备管理是操作系统中负责管理计算机硬件设备的部分,它包括对设备的初始化、分配和释放等功能。
在设备管理实验中,我们可以学习到设备的管理方法、设备的中断处理和设备的驱动程序设计等内容。
通过编写程序模拟设备的初始化和中断处理过程,可以更好地理解操作系统是如何管理设备的。
总结。
通过操作系统原理实验的学习,我们可以更深入地理解操作系统的原理和工作机制,提高对操作系统的理解和应用能力。
同时,实验还可以培养我们的动手能力和解决问题的能力,为今后从事计算机相关工作打下坚实的基础。
希望大家能够认真对待操作系统原理实验,取得更好的学习成绩,为将来的发展打下坚实的基础。
操作系统实验报告4一、实验目的本次操作系统实验的目的在于深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关操作,通过实际的实验操作,增强对操作系统原理的理解和应用能力,提高解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验内容与步骤(一)进程管理实验1、进程创建与终止使用 C++语言编写程序,创建多个进程,并在进程中执行不同的任务。
通过进程的标识符(PID)来监控进程的创建和终止过程。
2、进程同步与互斥设计一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。
观察生产者和消费者进程在不同情况下的执行顺序和结果。
(二)内存管理实验1、内存分配与释放编写程序,使用动态内存分配函数(如`malloc` 和`free`)来分配和释放内存。
观察内存的使用情况和内存泄漏的检测。
2、内存页面置换算法实现几种常见的内存页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法和最佳置换(OPT)算法。
通过模拟不同的页面访问序列,比较不同算法的性能。
(三)文件系统实验1、文件创建与读写使用 C++语言的文件操作函数,创建一个新文件,并向文件中写入数据。
从文件中读取数据,并进行数据的处理和显示。
2、文件目录操作实现对文件目录的创建、删除、遍历等操作。
观察文件目录结构的变化和文件的组织方式。
四、实验结果与分析(一)进程管理实验结果与分析1、进程创建与终止在实验中,成功创建了多个进程,并通过控制台输出观察到了每个进程的 PID 和执行状态。
可以看到,进程的创建和终止是按照程序的逻辑顺序进行的,操作系统能够有效地管理进程的生命周期。
2、进程同步与互斥在生产者消费者问题的实验中,通过信号量的控制,生产者和消费者进程能够正确地实现同步与互斥。
当缓冲区为空时,消费者进程等待;当缓冲区已满时,生产者进程等待。
操作系统课程实验报告一、实验目的操作系统是计算机系统中最为关键的软件之一,它负责管理计算机的硬件资源和软件资源,为用户提供一个良好的工作环境。
通过操作系统课程实验,旨在深入理解操作系统的基本原理和功能,提高对操作系统的实际操作能力和问题解决能力。
二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 1804),开发工具包括 Visual Studio Code、gcc 编译器等。
三、实验内容(一)进程管理1、进程创建与终止在 Windows 系统中,使用 C++语言创建多个进程,并通过进程句柄控制进程的终止。
在 Linux 系统中,使用 fork()系统调用创建子进程,并通过 exit()函数终止进程。
2、进程同步与互斥使用信号量实现进程之间的同步与互斥。
在 Windows 中,利用CreateSemaphore()和 WaitForSingleObject()等函数进行操作;在Linux 中,通过 sem_init()、sem_wait()和 sem_post()等函数实现。
(二)内存管理1、内存分配与释放在 Windows 中,使用 HeapAlloc()和 HeapFree()函数进行动态内存的分配与释放。
在 Linux 中,使用 malloc()和 free()函数完成相同的操作。
2、内存页面置换算法实现了几种常见的内存页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法等,并比较它们的性能。
(三)文件系统管理1、文件创建与读写在 Windows 和 Linux 系统中,分别使用相应的 API 和系统调用创建文件,并进行读写操作。
2、目录操作实现了目录的创建、删除、遍历等功能。
四、实验步骤(一)进程管理实验1、进程创建与终止(1)在 Windows 系统中,编写 C++程序,使用 CreateProcess()函数创建新进程,并通过 TerminateProcess()函数终止指定进程。
《操作系统》课程综合性的实验报告一、实验目的本次《操作系统》课程的综合性实验旨在通过实际操作和实践,深入理解操作系统的基本原理、功能和运行机制。
具体目标包括熟悉操作系统的进程管理、内存管理、文件系统管理以及设备管理等核心模块,提高对操作系统的整体认知和应用能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10 专业版开发工具:Visual Studio 2019编程语言:C++三、实验内容及步骤(一)进程管理实验1、创建多个进程使用 C++中的多线程库,创建多个进程,并观察它们的并发执行情况。
通过设置不同的优先级和资源需求,研究进程调度算法对系统性能的影响。
2、进程同步与互斥实现生产者消费者问题,使用信号量、互斥锁等机制来保证进程之间的同步和互斥。
观察在不同并发情况下,数据的正确性和系统的稳定性。
(二)内存管理实验1、内存分配与回收模拟内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
通过随机生成内存请求,观察不同算法下内存的利用率和碎片情况。
2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小和页表结构,观察页面置换算法(如 FIFO、LRU 等)对内存访问性能的影响。
(三)文件系统管理实验1、文件操作创建、读取、写入和删除文件,了解文件系统的基本操作和数据结构。
2、文件目录管理实现文件目录的创建、遍历和搜索功能,研究目录结构对文件访问效率的影响。
(四)设备管理实验1、设备驱动程序模拟编写简单的设备驱动程序,模拟设备的输入输出操作,如键盘输入和屏幕输出。
2、设备分配与调度研究设备分配算法,如先来先服务和优先级算法,观察设备的使用情况和系统的响应时间。
四、实验结果与分析(一)进程管理实验结果分析1、在创建多个进程的实验中,发现高优先级进程能够更快地获得CPU 资源,系统响应时间更短。
但过度提高某些进程的优先级可能导致其他进程饥饿。
2、对于进程同步与互斥问题,正确使用信号量和互斥锁能够有效地保证数据的一致性和系统的稳定性。
《计算机操作系统》课程实验报告题目文件管理学院: 计算机学院专业: 计算机科学与技术姓名班级学号2016年12月22日实验三文件管理1.实验目的:编写一个简单的二级文件系统实现程序,加深对文件系统的内部功能和内部实现的理解。
要求模拟采用二级目录结构的磁盘文件系统的文件操作能实现相应的命令,用输入命令来模拟用户程序中调用的文件操作。
2.实验内容:最基本的文件操作(1)创建文件在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项。
目录项中应该记录新文件的文件名及其在外存的地址等属性。
(2)删除文件当已不再需要某文件时,可将它从文件系统中删除。
在删除时,系统应该先从目录中找到要删除的文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
(3)读文件在读一个文件时,须在相应的系统调用中给出文件名和应该读入的内存目标地址。
此时,系统同样要查找目录,找到制定的目录项,从中得到被读文件在外存中的位置。
在目录项中,还有一个指针用于对文件的读/写。
(4)写文件在写一个文件时,须在相应的系统调用中给出该文件名及该文件在内存中的(源)地址。
为此,也同样须先查找目录,找到指定文件的目录项,在利用目录中的写指针进行写操作。
(5)截断文件如果一个文件的内容已经陈旧而需要全部更新文件的内容时,一种方法是将此文件删除,再重新创建一个新文件。
但如果文件名及其属性均无改变时,则可采取另一种所谓的截断文件的方法,此即将原有文件的长度设置为0,或说放弃原有的文件内容。
(6)设置文件的读/写位置前述的文件读/写操作,都只提供了对文件顺序存取的手段,即每次都是从文件的始端读或写。
设置文件读/写位置的操作,用于设置文件读/写指针的位置,以便每次读/写文件时,不是从其始端而是从所设置的位置开始操作。
也正因如此,才能改顺序存取为随机存取。
3.设计实现:1)流程图2)详细设计源代码#include <stdio.h>#include <string.h>#include <conio.h>#include <stdlib.h>#include <time.h>#define MaxUser 100 //定义最多有100个用户#define MaxDisk 512*1024 //定义磁盘空间大小#define commandAmount //对文件操作的指令数//存储空间管理有关结构体和变量char disk[MaxDisk];// 模拟512K的磁盘存储空间typedef struct distTable //磁盘块结构体{int maxlength;int start;int useFlag;distTable *next;}diskNode;diskNode *diskHead;typedef struct fileTable //文件快结构体{char fileName[10];int start; //文件在磁盘存储空间的起始地址int length; //文件内容长度int maxlength;//文件的最大长度char fileKind[3];//文件的属性--读写方式struct tm *timeinfo;bool openFlag;//判断是否有进程打开了文件};int used = 0;// 定义 MFD 目录中用已有的用户数//两级目录结构体typedef struct user_file_directory //用户文件目录文件 UFD {fileTable *file;user_file_directory *next;}UFD;typedef struct master_file_directory //主目录文件{char userName[10];char password[10];UFD *user;}MFD;MFD userTable[MaxUser];int userID = -1; //用户登录的 ID 号,值为-1 时表示没有用户登录//文件管理void fileCreate(); //创建文件void fileDelet(); //删除文件void fileWrite(); //写文件void fileRead();//读文件void fileRename(); //重命名文件void fileFind(); //查询文件void fileDir();// 显示某一用户所有文件void fileClose(); //关闭已打开的文件void fileChange();//修改文件的读写方式int requestDist(int &stratPostion, int maxlength);//磁盘分配查询void initDisk();//初始化磁盘void freeDisk(int startPostion);//磁盘空间释放void diskShow();//显示磁盘使用情况void initFile();//用户管理void userCreate();int login();void userDelet();void userFind();//用户登陆主界面void webUser();//用户内部界面void webFile();int main(){initDisk();initFile();webUser();return 0;}void webUser(){int i;while (1){printf("************************************************************\n");printf("1.创建用户 2.登陆用户\n");printf("3.删除用户 4.查看用户\n");printf("0.退出系统\n");printf("************************************************************\n");printf("请输入操作号\n");scanf("%d", &i);switch (i){case 0:exit(0); break;case 1:userCreate(); break;case 2:userID = login();if (userID != -1){webFile();}break;case 3:userDelet(); break;case 4:userFind(); break;default:printf("您输入的命令有误,请重新选择\n");system("pause");system("cls");break;}}}void userCreate(){char c;char userName[10];int i;if (used<MaxUser){printf("请输入用户名:");for (i = 0; c = _getch(); i++){if (c == 13) break;elseuserName[i] = c;printf("%c", c);}userName[i] = '\0';for (i = 0; i<used; i++){if (!strcmp(userTable[i].userName, userName)){printf("\n");printf("该用户名已存在,创建用户失败\n");system("pause");system("cls");return;}}strcpy(userTable[used].userName, userName);printf("\n");printf("请输入密码:");for (i = 0; c = _getch(); i++){if (c == 13) break;elseuserTable[used].password[i] = c;printf("*");}userTable[userID].password[i] = '\0';printf("\n");printf("创建用户成功\n");used++;system("pause");system("cls");}else{printf("创建用户失败,用户已达到上限\n");system("pause");system("cls");}fflush(stdin);}int login(){char name[10], psw[10];char c;int i, times;printf("请输入用户名:");for (i = 0; c = _getch(); i++){if (c == 13) break;elsename[i] = c;printf("%c", c);}name[i] = '\0';for (i = 0; i < used; i++){if (!strcmp(userTable[i].userName, name)) break;}if (i == used){printf("\n 您输入的用户名不存在\n");system("pause");system("cls");return -1;}for (times = 0; times<3; times++){memset(psw, '\0', sizeof(psw));printf("\n 请输入密码:");for (i = 0; c = _getch(); i++){if (c == 13) break;elsepsw[i] = c;printf("*");}printf("\n");for (i = 0; i<used; i++){if (!strcmp(psw, userTable[i].password)){printf("用户登录成功\n");system("pause");system("cls");break;}}if (i == used){printf("您输入的密码错误,您还有%d 次输入机会\n", 2 - times);if (times == 2) exit(0);}else break;}fflush(stdin);return i;}void userDelet(){int statePos;UFD *q;char name[10], psw[10];char c;int i, times, j;printf("请输入用户名:");for (i = 0; c = _getch(); i++){if (c == 13) break;elsename[i] = c;printf("%c", c);}name[i] = '\0';for (i = 0; i < used; i++){if (!strcmp(userTable[i].userName, name)) break;}if (i == used){printf("\n 您输入的用户名不存在\n");system("pause");system("cls");}else{q = userTable[i].user->next;while (q){if (q->file != NULL){statePos = q->file->start;}freeDisk(statePos);q = q->next;}for (i, j = i+1; i <= used; j++, i++){userTable[i] = userTable[j];}printf("\n 用户删除成功\n");system("pause");system("cls");used--;}}void userFind(){int i;printf("用户列表:\n");for (i = 0; i < used; i++){printf("%s\n", userTable[i].userName); }system("pause");system("cls");}void webFile(){int i;char name[10], kind[3];printf("********************************************************\n"); printf(" 1.创建 2.删除 \n"); printf(" 3.写入文件 4.查看文件内容 \n"); printf(" 5.重命名 6.查看文件属性 \n"); printf(" 7.查看用户文件 8.关闭文件 \n"); printf(" 9.修改文件权限 10.查看磁盘使用情况 \n"); printf(" 11.返回上级目录 12.退出系统 \n"); printf("*********************************************************\n"); printf("请输入操作号:");scanf("%d", &i);while (1){switch (i){case 1:fileCreate();break;case 2:fileDelet();break;case 3:fileWrite();break;case 4:fileRead();break;case 5:fileRename();break;case 6:fileFind();break;case 7:fileDir();break;case 8:fileClose();break;case 9:fileChange();break;case 10:diskShow();break;case 11:system("cls");webUser();break;case 12:exit(0);break;default:printf("输入错误请重新输入:");break;}scanf("%d", &i);}}void fileCreate(){time_t rawtime;int startPos;char c;char fileName[10], fileKind[10], fileLength[10];char command[50];int length;//int i, k,j;printf(" 创建文件格式为名称长度权限(r、w、rw):");fflush(stdin);gets(command);int i, k, j;for (i = 0, k = 0; command[i] != ' '; i++, k++)fileName[k] = command[i];fileName[k] = '\0';k = i;for (i = k + 1, k = 0; command[i] != ' '; i++, k++)fileLength[k] = command[i];fileLength[k] = '\0';k = i;j = 1;length = 0;//初始化文件长度for (i = strlen(fileLength) - 1; i >= 0; i--)//把字符串转换为十进制{length += (fileLength[i] - 48)*j;j *= 10;}for (i = k + 1, k = 0; command[i] != ' '&&command[i] != '\0'; i++, k++) fileKind[k] = command[i];fileKind[k] = '\0';UFD *fileNode, *p;for (p = userTable[userID].user->next; p != NULL; p = p->next) {if (!strcmp(p->file->fileName, fileName)){printf("文件重名,创建文件失败\n");system("pause");return;}}if (requestDist(startPos, length)){fileNode = (UFD*)malloc(sizeof(UFD));fileNode->file = (fileTable*)malloc(sizeof(fileTable));strcpy(fileNode->file->fileName, fileName);strcpy(fileNode->file->fileKind, fileKind);fileNode->file->maxlength = length;fileNode->file->start = startPos;fileNode->file->openFlag = false;time(&rawtime);fileNode->file->timeinfo = localtime(&rawtime);fileNode->next = NULL;if (userTable[userID].user->next == NULL)userTable[userID].user->next = fileNode;else{p = userTable[userID].user->next;while (p->next) p = p->next;p->next = fileNode;}printf("创建文件成功\n");system("pause");}else{printf("磁盘空间已满或所创建文件超出磁盘空闲容量,磁盘空间分配失败\n");system("pause");}}void initDisk(){diskHead = (diskNode *)malloc(sizeof(diskNode));diskHead->maxlength = MaxDisk;diskHead->useFlag = 0;diskHead->start = 0;diskHead->next = NULL;}void initFile(){int i;for (i = 0; i<MaxUser; i++)//初始化用户 UFD 目录文件的头指针{userTable[i].user = (UFD *)malloc(sizeof(UFD));userTable[i].user->next = NULL;}}int requestDist(int &startPostion, int maxLength){int flag = 0; //标记是否分配成功diskNode *p, *q, *temp;p = diskHead;while (p){if (p->useFlag == 0 && p->maxlength>maxLength){startPostion = p->start;q = (diskNode *)malloc(sizeof(diskNode));q->start = p->start;q->maxlength = maxLength;q->useFlag = 1;q->next = NULL;diskHead->start = p->start + maxLength;diskHead->maxlength = p->maxlength - maxLength;flag = 1;temp = p;if (diskHead->next == NULL) diskHead->next = q;else{while (temp->next) temp = temp->next;temp->next = q;}break;}p = p->next;}return flag;}void freeDisk(int startPostion){diskNode *p;for (p = diskHead; p != NULL; p = p->next){if (p->start == startPostion)break;}p->useFlag = false;}void fileDelet(){char fileName[10], command[50];int i, k;fflush(stdin);printf(" 输入文件名称:");gets(command);for (i = 0, k = 0; command[i] != '\0'; i++, k++) fileName[k] = command[i];fileName[k] = '\0';UFD *p, *q, *temp;q = userTable[userID].user;p = q->next;while (p){if (!strcmp(p->file->fileName, fileName)) break;else{p = p->next;q = q->next;}}if (p){if (p->file->openFlag != true)//先判断是否有进程打开该文件{temp = p;q->next = p->next;freeDisk(temp->file->start); //磁盘空间回收free(temp);printf("文件删除成功\n");system("pause");}else{printf("该文件正在被占用,删除失败\n");system("pause");}}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileRead(){int startPos, length;int k, i;char fileName[10], command[50];printf(" 输入文件名称:");fflush(stdin);gets(command);for (i = 0, k = 0; command[i] != '\0'; i++, k++)fileName[k] = command[i];fileName[k] = '\0';k = 0;UFD *p, *q;q = userTable[userID].user;for (p = q->next; p != NULL; p = p->next){if (!strcmp(p->file->fileName, fileName))break;}if (p){startPos = p->file->start;length = p->file->length;p->file->openFlag = true;//文件打开标记printf("*****************************************************\n");for (int i = startPos; k<length; i++, k++){if (i % 50 == 0) printf("\n"); //一行大于 50 个字符换行printf("%c", disk[i]);}printf("\n\n*****************************************************\n");printf("%s 文件正在被占用 , 请先将其关闭\n", p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileWrite(){char fileName[10], command[50];int i, k, startPos;printf(" 输入文件名称:");fflush(stdin);gets(command);for (i = 0, k = 0; command[i] != '\0'; i++, k++)fileName[k] = command[i];fileName[k] = '\0';UFD *p, *q;q = userTable[userID].user;for (p = q->next; p != NULL; p = p->next){if (!strcmp(p->file->fileName, fileName))break;}if (p){if (!strcmp(p->file->fileKind, "r"))//判断文件类型{printf("该文件是只读文件,写入失败\n");system("pause");return;}char str[500];printf("please input content:\n");gets(str);startPos = p->file->start;p->file->openFlag = true;//文件打开标记p->file->length = strlen(str);if (p->file->length>p->file->maxlength){printf("写入字符串长度大于该文件的总长度,写入失败\n");system("pause");return;}for (i = startPos, k = 0; k<(int)strlen(str); i++, k++) disk[i] = str[k];printf("文件写入成功,请将该文件关闭\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileFind(){char fileName[10], command[50];int i, k;printf(" 输入文件名称:");fflush(stdin);gets(command);for (i = 0, k = 0; command[i] != '\0'; i++, k++)fileName[k] = command[i];fileName[k] = '\0';UFD *p, *q;q = userTable[userID].user;for (p = q->next; p != NULL; p = p->next){if (!strcmp(p->file->fileName, fileName))break;}if (p){printf("********************************************\n");printf("文件名:%s\n", p->file->fileName);printf("文件长度:%d\n", p->file->maxlength);printf("文件在存储空间的起始地址:%d\n", p->file->start);printf("文件类型:%s\n", p->file->fileKind);printf("创建时间:%s\n", asctime(p->file->timeinfo));printf("********************************************\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileChange(){char fileName[10], fileKind[10], command[50];int i, k;fflush(stdin);printf(" 输入文件名称和新的文件权限:");gets(command);for (i = 0, k = 0; command[i] != ' '; i++, k++) fileName[k] = command[i];fileName[k] = '\0';for (k = i + 1, i = 0; command[k] != '\0'; i++, k++) fileKind[i] = command[k];fileKind[i] = '\0';UFD *p, *q;q = userTable[userID].user;for (p = q->next; p != NULL; p = p->next){if (!strcmp(p->file->fileName, fileName))break;}if (p){strcpy(p->file->fileKind, fileKind);printf("修改文件类型成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileRename(){char fileName[10], fileRename[10], command[50];int i, k;fflush(stdin);printf(" 输入文件名称和新的文件名称:");gets(command);for (i = 0, k = 0; command[i] != ' '; i++, k++)fileName[k] = command[i];fileName[k] = '\0';for (k = i + 1, i = 0; command[k] != '\0'; i++, k++) fileRename[i] = command[k];fileRename[i] = '\0';UFD *p, *q;q = userTable[userID].user;for (p = q->next; p != NULL; p = p->next){if (!strcmp(p->file->fileName, fileName))break;}if (p){while (q->next){if (!strcmp(q->next->file->fileName, fileRename)){printf("您输入的文件名已存在,重命名失败\n");system("pause");return;}q = q->next;}strcpy(p->file->fileName, fileRename);printf("重命名成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileDir(){char userName[10], command[50];int i, k;printf(" 输入用户名称:");fflush(stdin);gets(command);for (i = 0, k = 0; command[i] != '\0'; i++, k++)userName[k] = command[i];userName[k] = '\0';UFD *p;for (i = 0; i<MaxUser; i++){if (!strcmp(userTable[i].userName, userName)){k = i;break;}}if (i == MaxUser){printf("没有找到该用户,请检查输入用户名是否正确\n");system("pause");return;}else{p = userTable[k].user->next;printf("******************************************************************* ************\n");printf("文件名文件长度文件在磁盘的起始地址文件类型创建时间\n");for (; p != NULL; p = p->next)printf("%s %d %d %s %s", p->file->fileName, p->file->maxlength,p->file->start, p->file->fileKind, asctime(p->file->timeinfo));printf("******************************************************************* *************\n");system("pause");}}void diskShow(){diskNode *p;int i = 0, unusedDisk = 0;printf("******************************************************************* *******\n");printf(" 盘块号起始地址容量(bit) 是否已被使用\n");for (p = diskHead; p != NULL; p = p->next, i++){if (p->useFlag == false) unusedDisk += p->maxlength;printf(" %d %d %d %d\n", i, p->start, p->maxlength, p->useFlag);}printf("******************************************************************* ********\n");printf(" 磁盘空间总容量:512*1024bit 已使用:%dbit末使用:%dbit\n", MaxDisk - unusedDisk, unusedDisk);system("pause");}void fileClose(){char fileName[10], command[50];int i, k;printf(" 输入文件名称:");fflush(stdin);gets(command);for (i = 0, k = 0; command[i] != '\0'; i++, k++)fileName[k] = command[i];fileName[k] = '\0';UFD *p, *q;q = userTable[userID].user;for (p = q->next; p != NULL; p = p->next){if (!strcmp(p->file->fileName, fileName))break;}if (p){p->file->openFlag = false;printf("%s 文件已关闭\n", p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}4.实验结果1、创建用户2、登录用户3、查看用户4、删除用户5、创建文件6、删除文件7、写入文件8、查看文件内容9、重命名10、查看文件属性11、查看用户文件12、关闭文件13、修改文件权限14、查看磁盘使用情况15、返回上级目录5.实验过程中出现的问题及解决办法。