可空字段

ILE C 编译器允许您处理具有可能包含被视为空字段的记录的文件。 必须在 _Ropen() 函数上指定 nullcap=Y 。 如果可空字段设置为空,那么写入该字段的任何数据都无效。

如果使用 nullcap=Y打开文件,那么数据库会提供输入和输出空映射,如果文件是键控的,那么还会提供键空映射。 输入和输出空映射对于文件的当前记录格式中的每个字段都包含一个字节。 这些空字段映射用于在数据库和程序之间进行通信,以指示哪些特定字段应被视为空字段。

< recio.h > 文件中定义的 _RFILE 结构包含指向输入、输出和键空字段映射的指针,以及这些映射的长度(null_map_len 和 null_key_map_len)。

在写入数据库文件时,使用字符 "1" 指定哪些字段为空。 如果字段不为空,请指定字符 "0"。 这是在 out_null_map 指针指向的空字段映射中指定的。 如果该文件不包含任何可空字段,但已使用 nullcap=Y打开,那么程序必须将空字段映射中的每个字段设置为字符 "0"。 必须在将任何数据写入文件之前完成此操作。

从数据库文件中读取时,如果字段被视为空,那么将使用字符 "1" 来指示空字段映射中的相应字节。 这是在 in_null_map 指针指向的空字段映射中指定的。

对于当前记录格式的键中的每个字段,空键字段映射都由一个字节组成。 如果按具有空字段的键读取数据库文件,那么必须首先在 null_key_map 指向的空键映射中指示哪些字段包含空值。 对要视为空的任何字段指定字符 "1" ,对其他字段指定字符 "0"。

当调用 _Rupdate() 函数以更新已打开的文件以允许空字段处理时,将使用系统输入缓冲区。 因此,数据库要求通过 in_null_map 指针提供输入空字段映射。 在调用 _Rupdate()之前,用户必须根据将用于更新记录的数据来清除并设置输入空字段映射 (使用 in_null_map 指针)。

可以使用 #pragma mapinc 伪指令来生成对应于空字段映射的 typedefs。 可以将 _RFILE 结构中的空字段映射指针强制转换为这些类型以处理这些映射。 < recio.h > 文件中还提供了空字段宏,以帮助用户在程序中清除和设置空字段映射。