Ham*_*ani 2 erlang erlang-ports
当我有一个Erlang进程ID时,可以使用pid/3或list_to_pid/1函数(内部做同样的事情)来获得用于调试目的的进程。
Process = pid(0,4,1).
Process = list_to_pid("<0.4.1>").
Run Code Online (Sandbox Code Playgroud)
所以问题是;那港口呢?
有很多功能接口可以接受process()和port()数据类型,例如register/2。因此,我需要知道是否有一种方法可以通过#Port<0.567>进程的ID(例如)来获取端口。禁止吗?如果是这样,有什么理由吗?
我不知道标准库中有什么可以帮助您解决此问题,但是侦查库中有可以满足您需要的recon_lib:term_to_port/1函数。例如:
1> {ok,L} = gen_tcp:listen(0, []).
{ok,#Port<0.687>}
2> L = recon_lib:term_to_port("#Port<0.687>").
#Port<0.687>
Run Code Online (Sandbox Code Playgroud)
此代码在临时端口上打开一个侦听套接字,并将其存储在variable中L。然后,它断言,使用模式匹配,即字符串化端口通过的结果#Port<0.687>至recon_lib:term_to_port/1返回完全相同的套接字L。