首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

registry

C库

登记处

库摘要

存储和备份键值对。

描述

此模块提供对在称为注册表的表中存储键值对的支持Mnesia,以原子方式备份注册表以及稍后从Mnesia中恢复注册表的内容。

输出

int ei_reg_close(reg)

类型

以前创建的注册表ei_reg_open()被关闭,并且它包含的所有对象都被释放。

reg要关闭的注册表。

返回0

int ei_reg_delete(reg,key)

类型

从注册表中删除一个对象。 该对象不会从注册表中删除,只会标记为稍后删除,以便在稍后备份到Mnesia时,也可以从Mnesia表中删除相应的对象。 如果以后使用相同的键创建另一个对象,该对象将被重用。

调用ei_reg_dump()或ei_reg_purge()后,该对象将从注册表中移除。

  • reg注册表包含key...
  • key是要删除的对象。

成功返回0,否则返回-1。

int ei_reg_dump(fd,reg,mntab,flags)

类型

Mnesia以原子方式将注册表内容转储到表中,即更新所有数据或不更新数据。如果在备份数据时遇到任何错误,则整个操作会中止。

  • fd是与Erlang的开放连接。Mnesia3.0或更高版本必须在Erlang节点上运行。
  • reg是要备份的注册表。
  • mntab是备份数据将被放置的Mnesia表的名称。 如果该表不存在,则使用可配置的默认值自动创建该表。 有关配置此行为的信息,请参阅Mnesia。

如果标志为0,则备份仅包含自上次备份或还原(即增量备份)以来已创建,修改或删除的对象。 备份后,任何标记为脏的对象现在都是干净的,并且已标记为删除的所有对象都将被删除。

或者,将标志设置为EI_FORCE将导致完成完整备份,并且EI_NOPURGE会导致删除的对象在之后保留在注册表中。 如果两种行为都是需要的,可以将这些按位“或”在一起。 如果指定了EI_NOPURGE,则可以使用ei_reg_purge()来稍后从注册表中明确删除已删除的项目。

成功返回0,否则返回-1。

double ei_reg_getfval(reg,key)

类型

获取与key在登记处。该值必须是浮点类型。

  • reg将查找对象的注册表。
  • key要查找的对象的名称。

成功时,该函数返回与键关联的值。 如果找不到对象或者它不是浮点对象,则返回-1.0。 要避免带内错误报告问题(即,如果无法区分-1.0和有效结果),请使用更一般的函数ei_reg_getval()。

int ei_reg_getival(reg,key)

类型

获取与注册表中的键关联的值。 该值必须是整数。

  • reg将查找对象的注册表。
  • key要查找的对象的名称。

成功时,该函数返回与键关联的值。 如果找不到对象或者它不是整数对象,则返回-1。 为避免带内错误报告问题(即,如果无法区分-1和有效结果),请使用更一般的函数ei_reg_getval()。

const void *ei_reg_getpval(reg,key,size)

类型

获取key注册表中的相关值。该值必须是二进制(指针)类型。

  • reg将查找对象的注册表。
  • key要查找的对象的名称。
  • size初始化为包含对象的长度(如果找到的话)。

成功时,函数返回与键关联的值并指示其长度。 如果找不到对象或者它不是二进制对象,则返回NULL。 为避免带内错误报告出现问题(即,如果无法区分NULL和有效结果),请使用更一般的函数ei_reg_getval()。

const char *ei_reg_getsval(reg,key)

类型

获取与注册表中的键关联的值。 该值必须是一个字符串。

  • reg将查找对象的注册表。
  • key要查找的对象的名称。

成功时,该函数返回与键关联的值。 如果找不到对象或者它不是字符串,则返回NULL。 为避免带内错误报告出现问题(即,如果无法区分NULL和有效结果),请使用更一般的函数ei_reg_getval()。

int ei_reg_getval(reg,key,flags,v,...)

类型

从注册表中检索任何类型对象的通用函数。

  • reg将查找对象的注册表。
  • key要查找的对象的名称。

标志表示您正在查找的对象的类型。如果标志为0,则返回任何类型的对象。如果标志是EI_INT,EI_FLT,EI_STR或EI_BIN,那么只返回那种类型的值。

v指向的缓冲区必须足够大以容纳返回数据,也就是说,它必须分别指向int,double,char *或void *中的一个。

如果flags为EI_BIN,则需要第五个参数int * size,以便可以返回对象的大小。成功时,v(和size,如果对象是二进制的)用与key关联的值初始化,函数返回EI_INT,EI_FLT,EI_STR或EI_BIN,指示对象的类型。失败时,返回-1并且参数不会更新.int ei_reg_markdirty(reg,key)Types将注册表对象标记为脏。这确保它被包含在对Mnesia的下一次备份中。通常这个操作是不必要的,因为所有正常的注册表'set'函数都会自动执行此操作。但是,如果您已从注册表中检索到字符串或二进制对象的值并修改了内容,则该注册表不可见,并且该对象被假定为未修改。这个功能允许你做这样的修改,然后让注册表了解它们。

  • reg包含对象的注册表。
  • key要标记的对象的名称。

成功时返回0,否则返回-1

ei_reg *ei_reg_open(size)

类型

打开(创建)注册表,最初为空。稍后关闭注册表,请使用ei_reg_close()

size是您打算在注册表中存储的对象的大概数量。由于注册表使用具有碰撞链接的散列表,因此可以存储的对象数量不存在绝对上限。但是,出于效率原因,最好选择一个适合您需求的号码。稍后要更改尺寸,请使用ei_reg_resize()。请注意,您提供的号码会增加到最接近的较大素数。

如果成功返回空注册表,则为NULL...

int ei_reg_purge(reg)

类型

删除标记为删除的所有对象。 当使用ei_reg_delete()删除对象时,它们不会从注册表中删除,只会标记为稍后删除。 在稍后备份到Mnesia时,也可以从Mnesia表中删除对象。 如果您没有备份到Mnesia,您可能希望使用此功能手动删除对象。

reg是包含标记为删除的对象的注册表。

成功时返回0,否则返回-1

int ei_reg_resize(reg,newsize)

类型

更改注册表的大小。

newsize用于创建注册表的新大小。这个数字被增加到最近的更大的素数。

成功后,将调整注册表的大小,对所有内容进行重新散列,以及0会被归还。如果失败,注册表将保持不变,并且-1会被归还。

int ei_reg_restore(fd,reg,mntab)

类型

Mnesia表的内容被读入注册表中。

  • fd是与Erlang的开放连接。Mnesia3.0或更高版本必须在Erlang节点上运行。
  • reg要放置数据的注册表。
  • mntabMnesia从中读取数据的表的名称。

请注意,只能恢复某种格式的表格,即已经创建并备份的表格ei_reg_dump()。如果在操作之前注册表不是空的,表的内容将被添加到注册表的内容中。如果表中包含的对象与注册表中已有的对象具有相同的键值,则注册表对象将被新值覆盖。如果注册表包含不在表中的对象,则该操作不会改变它们。

还原操作之后,注册表的整个内容被标记为未修改。请注意,这包括在还原之前修改并且未被还原覆盖的所有对象。

成功时返回0,否则返回-1

int ei_reg_setfval(reg,key,f)

类型

用指定的键和浮点值f创建一个键 - 值对。 如果一个对象已经存在相同的密钥,则新值替换旧值。 如果以前的值是二进制或字符串,则用free()释放它。

  • reg 是要放置对象的注册表。
  • key对象名。
  • f要赋值的浮点值。

成功时返回0,否则返回-1

int ei_reg_setival(reg,key,i)

类型

用指定的键和整数值i创建一个键值对。 如果一个对象已经存在相同的密钥,则新值替换旧值。 如果以前的值是二进制或字符串,则用free()释放它。

  • reg要放置对象的注册表。
  • key对象名。
  • i要赋值的整数值。

成功时返回0,否则返回-1

int ei_reg_setpval(reg,key,p,size)

类型

用指定的键创建一个键值对,其中“value”是p指向的二进制对象。 如果一个对象已经存在相同的密钥,则新值替换旧值。 如果以前的值是二进制或字符串,则用free()释放它。

  • reg要放置对象的注册表。
  • key对象名。
  • p是一个指向二进制对象的指针。 该对象本身必须通过对malloc()或类似的函数的单个调用创建,以便注册表稍后可以通过调用free()将其删除。
  • size二进制对象的长度(以字节为单位)。

成功时返回0,否则返回-1

int ei_reg_setsval(reg,key,s)

类型

使用“value”是指定字符串s的指定键创建键 - 值对。 如果一个对象已经存在相同的密钥,则新值替换旧值。 如果以前的值是二进制或字符串,则用free()释放它。

  • reg要放置对象的注册表。
  • key对象名。
  • s要分配的字符串。字符串本身必须是通过对malloc()或类似的函数,以便注册表可以在必要时通过调用free()...

成功时返回0,否则返回-1

int ei_reg_setval(reg,key,flags,v,...)

类型

使用由v指定的指定键创建键 - 值对。如果一个对象已经存在相同的键,则新值替换旧值。 如果以前的值是二进制或字符串,则用free()释放它。

  • reg要放置对象的注册表。
  • key对象名。

标志表示由v指定的对象的类型。标志必须是EI_INT,EI_FLT,EI_STR和EI_BIN之一,指示v是int,double,char *还是void *。

如果标志是EI_BIN,则需要第五个参数大小,指示由v指向的对象的大小(以字节为单位)。如果希望在注册表中存储任意指针,则指定大小为0.在这种情况下,对象本身 不是通过ei_reg_dump()操作传递的,只是指针值。成功时返回0,否则返回-1.int ei_reg_stat(reg,key,obuf)TypesReturns有关对象的信息。

  • reg包含对象的注册表。
  • key对象名。
  • obuf是指向ei_reg_stat结构,定义如下:
代码语言:javascript
复制
struct ei_reg_stat {
  int attr;
  int size;
};
        

在attr中,对象的属性被存储为其类型(EI_INT,EI_FLT,EI_BIN和EI_STR之一)的逻辑或,是否标记为删除(EI_DELET),以及自上次备份至 Mnesia(EI_DIRTY)。

字段size表示存储EI_STR(包括终止0)和EI_BIN对象或0for EI_INT和所需的字节大小EI_FLT

返回0并在成功时初始化obuf,否则返回-1。

int ei_reg_tabstat(reg,obuf)

类型

返回有关注册表的信息。使用此函数返回的信息,您可以查看注册表的大小是否适合其包含的数据量。

  • reg返回有关信息的注册表。
  • obuf是一个指向ei_reg_tabstat结构的指针,定义如下:
代码语言:javascript
复制
struct ei_reg_tabstat {
  int size;  
  int nelem; 
  int npos;  
  int collisions; 
};
        

字段size表示注册表中散列位置的数量。这是您创建或上次调整注册表大小时提供的数字,四舍五入到最接近的素数。

  • nelem指示存储在注册表中的元素数。它包括已删除但未清除的对象。
  • npos指示注册表中所占的唯一位置的数目。
  • collisions指示有多少个元素在注册表中共享位置。

在成功的时候,0会被退回并且obuf初始化为包含表统计信息,则为-1会被归还。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com