RECNO - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

BUGS

仅支持大小端字节顺序。

语法

#include <sys/types.h>
#include <db.h>

另外参见

btree(3),dbopen(3),hash(3),mpool(3)

关系数据库系统中的文档处理,Michael Stonebraker,Heidi Stettner,Joseph Kalash,Antonin Guttman,Nadene Lynn,备忘录编号UCB / ERL M82 / 32,1982年5月。

名称

recno-记录号数据库访问方法

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

说明

请注意:此页面记录了glibc所提供的接口,直至2.1版。从2.2版开始,glibc不再提供这些接口。可能您正在寻找libdb库提供的API。

例程dbopen(3)是数据库文件的库接口。受支持的文件格式之一是记录号文件。数据库访问方法的一般说明在dbopen(3)中,此手册页仅描述了recno特定的信息。

记录号数据结构是以平面文件格式存储的可变记录或定长记录,可通过逻辑记录号访问。记录号5的存在意味着记录1到4的存在,并且删除记录号1导致记录号5被重新编号为记录号4,并且光标(如果位于记录号1之后)将向下移动。一条记录。

提供给dbopen(3)的特定于recno访问方法的数据结构在包含文件中定义如下:

typedef struct {
    unsigned long flags;
    unsigned int  cachesize;
    unsigned int  psize;
    int           lorder;
    size_t        reclen;
    unsigned char bval;
    char         *bfname;
} RECNOINFO;

此结构的元素定义如下:

flags
The flag value is specified by ORing any of the following values:
R_FIXEDLEN
记录是固定长度的,没有字节分隔。结构元素reclen指定记录的长度,并且结构元素bval用作填充字符。插入到数据库中的任何小于记录长度的记录都将自动填充。
R_NOKEY
dbopen(3)指定的接口中,顺序记录检索同时填充了调用者的键和数据结构。如果指定了R_NOKEY标志,则不需要游标例程来填充键结构。这允许应用程序在文件末尾检索记录,而无需读取所有中间记录。
R_SNAPSHOT
此标志要求在调用dbopen(3)时为文件拍摄快照,而不是允许从原始文件中读取任何未修改的记录。
cachesize
内存缓存的建议最大大小(以字节为单位)。该值仅供参考,访问方法将分配更多的内存,而不是失败。如果cachesize为0(未指定大小),则使用默认缓存。
psize
recno访问方法将其记录的内存中副本存储在btree中。该值是用于该树中节点的页面大小(以字节为单位)。如果psize为0(未指定页面大小),则根据基础文件系统I / O块大小选择页面大小。有关更多信息,请参见btree(3)。
lorder
存储的数据库元数据中整数的字节顺序。该数字应将订单表示为整数;例如,大端顺序为4,321。如果lorder为0(未指定顺序),则使用当前主机顺序。
reclen
固定长度记录的长度。
bval
用于标记长度可变记录的记录的定界字节,以及用于固定长度记录的填充字符。如果未指定任何值,则使用换行符(" \ n")标记可变长度记录的结尾,并用空格填充固定长度记录。
bfname
recno访问方法将其记录的内存中副本存储在btree中。如果bfname为非NULL,则它指定btree文件的名称,就像指定为btree文件的dbopen(3)的文件名一样。

RECNO访问方法使用的键/数据对的数据部分与其他访问方法相同。关键是不同的。键的数据字段应该是指向包含文件中定义的recno_t类型的存储位置的指针。此类型通常是可用于实现的最大无符号整数类型。密钥的大小字段应为该类型的大小。

因为没有与基础recno访问方法文件相关的元数据,所以每次打开文件时,都必须明确指定对默认值(例如,固定记录长度或字节分隔符值)的任何更改。

dbopen(3)指定的接口中,如果记录数比数据库中当前的最大记录多一个,则使用put接口创建新记录将导致创建多个空记录。

错误说明

recno访问方法例程可能会失败,并且会为库例程dbopen(3)或以下内容指定的任何错误设置errno

EINVAL
试图将记录添加到太大的固定长度数据库中。
日期:2019-08-20 18:01:09 来源:oir作者:oir