系列:本文闡述了如何使用erlang/elixir: 外部通訊之-nif
erlang/elixir: 外部通訊之-埠驅動
erlang/elixir: 外部通訊之-c節點
rebar3
來構建乙個簡單的nif(內建函式)
讓我們從建立乙個新的名為test_nif
的lib
, 使用test_nif
專案中的cmake
模板開始
$ rebar3 new lib test_nif
===> writing test_nif/src/test_nif.erl
===> writing test_nif/rebar.config
===> writing test_nif/.gitignore
===> writing test_nif/license
===> writing test_nif/readme.md
$ cd test_nif
$ rebar3 new cmake
===> writing c_src/makefile
設定鉤子
..,
]}.,
]}.
makefile
是由rebar3 new cmake
命令建立的.
下面是乙個nif, 包含乙個repeat
函式, 接受乙個pid
和乙個erlang term作為引數, 向該pid
傳送訊息:
c_src/test_nif.c
#include "erl_nif.h"
erl_nif_term
mk_atom(erlnifenv* env, const char* atom)
return ret;
}erl_nif_term
mk_error(erlnifenv* env, const char* mesg)
static erl_nif_term
repeat(erlnifenv* env, int argc, const erl_nif_term ar**)
if(!enif_is_pid(env, ar**[0]))
if(!enif_get_local_pid(env, ar**[0], &pid))
msg_env = enif_alloc_env();
if(msg_env == null)
copy = enif_make_copy(msg_env, ar**[1]);
if(!enif_send(env, &pid, msg_env, copy))
enif_free_env(msg_env);
return mk_atom(env, "ok");
}static erlniffunc nif_funcs =
};erl_nif_init(test_nif, nif_funcs, null, null, null, null);
測試**src/test_nif.erl
-module(test_nif).
-export([repeat/2]).
-on_load(init/0).
-define(libname, test_nif).
repeat(_, _) ->
not_loaded(?line).
init() ->
->
case filelib:is_dir(filename:join(["..", priv])) of
true ->
filename:join(["..", priv, ?libname]);
_ ->
filename:join([priv, ?libname])
end;
dir ->
filename:join(dir, ?libname)
end,
erlang:load_nif(soname, 0).
not_loaded(line) ->
exit(, ]}).
執行rebar3 shell
$ rebar3 shell
===> verifying dependencies...
===> compiling test_nif
erlang/otp 17 [erts-6.3] [source] [64-bit] [smp:4:4] [async-threads:0] [kernel-poll:false]
eshell v6.3 (abort with ^g)
1> test_nif:repeat(self(), hello).
ok2> receive x -> x end.
hello
Erlang Elixir 連線到遠端節點
通過 erlang 提供的 ssh應用程式連線到遠端 erlang 控制台 生成客戶端 伺服器秘鑰 mkdir client ssh keygen t rsa f tmp client id rsa mkdir server ssh keygen t rsa f tmp server ssh hos...
CentOS 7通過SSH外部訪問
1.安裝centos 7 最小版本後,使用ip addr 查詢ip 2.進入cd etc sysconfig network scripts vi ifcfg ens33對檔案進行修改 type ethernet proxy method none browser only no bootproto...
mysql外部鎖定 Mysql外部鎖定
mysql外部鎖定是鎖定方式之一,下面就將對mysql外部鎖定進行詳細的介紹,供您參考,如果您對mysql外部鎖定方面感興趣的話,不妨一看。mysql外部鎖定 伺服器還可以使用外部鎖定 檔案級鎖 來防止其它程式在伺服器使用表時修改檔案。通常,在表的檢查操作中伺服器將外部鎖定與myisamchk或is...