0

我必须使用 C++ 来做到这一点,我必须创建一个文件系统。在文件系统初始化时,需要初始化一个 10 MB 的文件。文件应该分为3部分。文件“File_system”的第一部分(1MB)应保留用于文件名和文件中数据的起始地址。应该细分为子块,每个子块容量500B。换句话说,文件的第一个块(1 MB)中的每个子块应具有存储文件名和起始地址的容量,不应超过500B。文件“File_system”的第二部分 (1MB),用于在第三部分列出可用的空块。
文件“File_system”的第三部分 (8MB),用于写入第一部分列出的文件中的数据。我知道文件处理、链接列表、树、类。我不知道如何开始。如何在文本文件中分配空间。

4

1 回答 1

0

您通常会通过定义一些结构来表示每个部分的数据来做到这一点。例如,您的第一部分(500 字节)结构将是这样的:

#pragma pack(push, 1) // or equivalent
struct directory_entry { 
    long starting_address;
    char file_name[500-sizeof(long);
};
#pragma pack(pop)

对于该文件,您将需要一个占用 1 兆字节的数组。

第二部分可能最容易设置为位图。决定用于存储本身的块大小。为简单起见,假设为 1 KB。因此,您将把第三部分的 8 MB 视为 1 KB 块的数组。第二部分将有一个比特专用于每个 1 KB 块。如果该块空闲,则为 0,如果该块正在使用,则为 1。

您可以通过将所有内容设置为 0 字节来初始化它。然后要创建一个文件,您将扫描目录条目部分,直到找到一个其起始地址仍设置为 0 的条目。然后您将扫描第二部分中的位图以找到一些可以使用的空间。您将该空间的位设置为 1,并将目录条目中的起始地址设置为与您发现的未使用的块相对应的地址。

为了支持文件中的多个块,您可以(例如)将每个块的最后 4 个字节用于构成该文件的下一个块的地址(以及一些其他不可能的值,表示文件的结尾)。对于大多数目的来说,这不是最有效的做事方式,但对于手头的任务来说可能就足够了。

当然,这些都有很多替代方案。我所概述的是一种非常简单但(老实说)效率非常低的文件系统类型,与您在30 多年前可能在真正低端计算机上看到的类似 - 但只是一个明显的例子,甚至 MS-DOS FAT 文件系统也更加复杂。

于 2013-11-14T06:34:04.007 回答