查看源代码 ei_global

访问全局注册的名称。

描述

此模块提供在 global 模块中注册、查找和取消注册名称的支持。更多信息,请参考kernel:global

请注意,以下函数使用调用者提供的打开的文件描述符执行 RPC。在全局操作期间,此文件描述符不得用于其他流量,因为该函数可能会接收到意外数据并失败。

ei_global_names()

char **ei_global_names(ei_cnode *ec, int fd, int *count);

检索所有已知的全局名称的列表。

  • ec 是代表当前 cnode 的 ei_cnode
  • fd 是指向 Erlang 连接的打开描述符。
  • count 是一个整数的地址,或者为 NULL。如果 count 不为 NULL,则该函数会将其设置为找到的名称数量。

成功时,该函数返回一个字符串数组,每个字符串包含一个已注册的名称,并将 count 设置为找到的名称数量。该数组以一个单独的 NULL 指针结束。失败时,该函数返回 NULLcount 不会修改。

注意

调用者有责任在之后释放该数组。它已通过对 malloc() 的单次调用分配,因此只需要单次 free() 调用即可。

自 OTP 23.0 起可用

ei_global_register()

int ei_global_register(int fd, const char *name, erlang_pid *self);

global 中注册一个名称。

  • fd 是指向 Erlang 连接的打开描述符。
  • name 是要在 global 中注册的名称。
  • pid 是要与 name 关联的 pid。当进程请求 name 的位置时,global 将返回此值。

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

自 OTP 23.0 起可用

ei_global_unregister()

int ei_global_unregister(ei_cnode *ec, int fd, const char *name);

global 中取消注册一个名称。

  • ec 是代表当前 cnode 的 ei_cnode
  • fd 是指向 Erlang 连接的打开描述符。
  • name 是要从 global 中取消注册的名称。

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

自 OTP 23.0 起可用

ei_global_whereis()

int ei_global_whereis(ei_cnode *ec, int fd, const char *name, erlang_pid* pid, char *node);

global 中查找一个名称。

  • ec 是代表当前 cnode 的 ei_cnode
  • fd 是指向 Erlang 连接的打开描述符。
  • name 是要在 global 中查找的名称。

pid 参数是指向 erlang_pid 的指针,如果成功,该函数将使用与全局名称关联的 pid 更新该指针。

如果 node 不为 NULL,则它是一个指向缓冲区的指针,该函数可以在其中填充找到 name 的节点的名称。如果需要,可以将 node 直接传递给 ei_connect()

成功时,该函数返回 0,更新由 pid 参数指向的 erlang_pid,并且 node 参数被初始化为找到 name 的节点的名称。失败时,返回一个负数。

自 OTP 23.0 起可用