通过c模块中的nl函数实现,如下
c:nl(Module) -> void()
Load module on all nodes.

通过net_adm:ping(Node)可以实现节点的连接

使用nl可以将模块远程装载到其它的节点上,即使那些节点没有此模块的代码

io模块中也有一个nl函数,不过该函数表示写一个new line
io_lib模块中也有一个nl,含义同上

注意:c模块代表命令接口(Command Interface)的意思;该模块的文档称:该模块中的函数仅用于在Erlang shell中使用,使用时模块名前缀可以省去

查nl源码如下:
nl(Mod) ->
    case code:get_object_code(Mod) of
	{_Module, Bin, Fname} ->
            rpc:eval_everywhere(code,load_binary,[Mod,Fname,Bin]);
	Other ->
	    Other
    end.


rpc:eval_everywhere(code,load_binary,[Mod,Fname,Bin])最终执行
eval_everywhere([node()|nodes()], Module, Function, Args)
也就是说在[node()|nodes()]的节点列表中的每个节点上执行code:load_binary(Mode, Fname, Bin)

code:get_object_code(Module) -> {Module, Binary, Filename} | error
此函数在code path中模块Module的二进制目标代码。Binary是包含此模块目标代码的二进制数据对象,如果要在分布式系统中远程装载代码,例如在远程节点Node中装载模块Module可以这样:
...       
{_Module, Binary, Filename} = code:get_object_code(Module),
rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
...
评论
发表评论

您还没有登录,请登录后发表评论

cryolite
搜索本博客
存档
最新评论