NIF调用Erlang后二进制更改的值

  发布于 2022-12-15 20:50

我打算使用NIF操作二进制文件用于我计划在Erlang中编码的应用程序.下面给出了指向cpp文件的gist链接和NIF的erl文件.

[Erl Gist Link] https://gist.github.com/abhijitiitr/3a5bc97184d6dd32f97b

[C++ Gist Link] 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.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有