我必须使用C++来实现这一点,我必须创建一个文件系统。在初始化文件系统时,需要初始化一个10MB的文件。文件应分为3个部分。文件“File_system”的第一部分(1MB)应保留为文件名和文件中数据的起始地址。应将其细分为子块,每个子块的容量为500B。换句话说,文件的第一个块(1MB)中的每个子块应具有存储文件名和起始地址的容量,该容量不应超过500B。文件“File_system”的第二部分(1MB),用于列出第三部分中的可用空块。
文件“File_system”的第三部分(8MB)用于写入第一部分中列出的文件中的数据。我知道文件处理,链接表,树,类。我不知道如何给一个start.How在文本文件中分配空间。
发布于 2013-11-14 14:34:04
通常情况下,您可以通过定义一些结构来表示每个部分的数据。例如,您的第一部分( 500字节)结构将如下所示:
#pragma pack(push, 1) // or equivalent
struct directory_entry {
long starting_address;
char file_name[500-sizeof(long);
};
#pragma pack(pop)对于这个文件,你需要一个占用1兆字节的数组。
第二部分可能是最容易设置为位图的部分。确定用于存储本身的块的大小。为简单起见,我们假设为1千字节。因此,您将把第三部分的8MB视为一个包含1KB块的数组。第二部分将有一个位专门用于每个1KB数据块。如果该块空闲,则为0;如果该块正在使用,则为1。
您可以通过将所有内容设置为0字节来初始化它。然后,要创建一个文件,您将扫描目录条目部分,直到找到一个starting_address仍设置为0的条目。然后,您将扫描第二部分中的位图,以查找可以使用的空间。您将该空间的位设置为1,并将目录条目中的starting_address设置为与您发现的未使用的块相对应的地址。
要在一个文件中支持多个块,您可以(举个例子)将每个块的最后4个字节用于组成该文件的下一个块的地址(以及表示文件结束的其他一些不可能的值)。对于大多数目的来说,这并不是最有效的方法,但对于手头的任务来说,这可能已经足够了。
当然,其中每一个都有很多替代方案。我所概述的是一种非常简单,但(老实说)相当低效的文件系统类型,与几年前您可能在非常低端的计算机30+上看到的文件系统有些相似--但作为一个明显的示例,即使是MS-DOS FAT文件系统也更加复杂。
https://stackoverflow.com/questions/19970657
复制相似问题