了解文件页面管理程序的功能

Understanding function for file-page-manager program

本文关键字:功能 管理程序 文件 了解      更新时间:2023-10-16

,所以我必须为文件页面程序程序编码以下函数,但是我不明白如何处理null终止功能。

RC insertRecord(FileHandle &fileHandle, const vector<Attribute>
&recordDescriptor, const void *data, RID &rid)

给定记录描述符,将新记录插入提供的句柄标识的文件中。你可以假设输入始终是正确且没有错误的。也就是说,您无需检查查看输入记录是否具有正确数量的属性数量或属性类型是否匹配。然而,为了处理属性中的null值, *数据中的第一部分包含n个字节传递有关每个字段的空信息。值n可以使用此功能来计算公式:CEIL(记录/8中的字段数(。例如,如果有5个字段,则ceil(5/8(= 1字节。如果有20个字段,则大小为ceil(20/8(= 3个字节。第一个字节中最左侧的位对应于第一个字段。第一个字节中最右侧的位对应于第八字段。如果有八个以上的字段,第二个字节中的最左侧位对应于第九个字段等等。如果对每个字段的相应位设置为1,则实际数据不包含该字段的任何值。例如,如果记录中有三个字段,第二个字段包含null,一个字节中的位表示为0100000。此外,在实际数据中,传入记录仅包含第一个和第三个值。也就是说,第三个字段值是在这种情况下,立即放置在第一个字段值之后。

我不明白,因此,如果我们有3个属性,则3/8 = 3个字节,因此,数据的前3个字节将与NULL功能相对应。但是,我们如何将这些字节转换为C 中的位,因此我们实际上可以看到零值在哪里?

指令描述的是bitmask。记录中的每个字段由一个位表示。如果该位是1,则数据不包含该字段的输入。这使您可以确定data指向的数据的长度。

通常每个字节有8位,因此,如果您有9个字段,则需要9位,将需要2个字节。17个字段,17位,3个字节等。这是提供计算零信息长度的提供的公式的来源。

因此,如果您有3个字段,则需要3/8 = 0.375字节。需要将其舍入(CEIL函数(到最近的整个字节或1个字节。