Erlang でコーディングする予定のアプリの NIF を使用してバイナリを操作するつもりです。NIF の cpp ファイルと erl ファイルへの gist リンクを以下に示します。
[Erl Gist リンク] https://gist.github.com/abhijitiitr/3a5bc97184d6dd32f97b
[C++ Gist リンク] https://gist.github.com/abhijitiitr/24d2b780f2cdacebfb07
基本的に私は簡単なテストをしようとしています。NIF 呼び出し間でバイナリを共有し、連続する NIF 呼び出しでそれらを正常に操作します。
erlang REPL でコードをテストすると、
c(binary_test).
Ref=binary_test:open(<<1>>).
binary_test:increment(Ref,<<3>>).
バイナリは、NIF 呼び出しの間に変更を保存しました。3 番目のコマンドの REPL 出力は次のとおりです。
1
3
60
60
<<"?">>
<<1>>
初期化フェーズでパスしました。なぜに変わったの<<60>>
ですか?ここで何が起こっているのか理解できません。誰かがエラーを指摘できますか?
C++ コンパイル命令
clang++ -std=c++11 -stdlib=libc++ -undefined dynamic_lookup -O3 -dynamiclib binary_test.cpp -o binary_test.so -I /usr/local/Cellar/erlang/17.0/lib/erlang/erts-6.0/include/
私のMacで。
また、NIF で共有リソースを操作する並行プロセスについても質問したいと思いました。それは可能ですか、それとも単一の Erlang プロセスで NIF にアクセスする必要があるという規則がありますか。