查看源代码 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
指针结束。失败时,该函数返回 NULL
且 count
不会修改。
注意
调用者有责任在之后释放该数组。它已通过对
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 起可用