我打算使用 NIF 为我打算在 Erlang 中编写代码的应用程序操作二进制文件。下面给出了 NIF 的 cpp 文件和 erl 文件的要点链接。
[Erl 要点链接] https://gist.github.com/abhijitiitr/3a5bc97184d6dd32f97b
[C++ 要点链接] https://gist.github.com/abhijitiitr/24d2b780f2cdacebfb07
基本上我正在尝试做一个简单的测试。在 NIF 调用之间共享二进制文件,并通过连续的 NIF 调用成功地操作它们。
如果您通过以下方式测试 erlang REPL 中的代码
c(binary_test).
Ref=binary_test:open(<<1>>).
binary_test:increment(Ref,<<3>>).
二进制文件存储了 NIF 调用之间的更改。第三个命令的 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。