从Erlang C NIF返回指针

时间:2013-01-19 19:48:54

标签: c pointers erlang erlang-nif

在编写Erlang C NIF时,如何将在C中创建的指针称为数组,返回到Erlang以供以后在另一个NIF调用中使用相同的Erlang进程?

 #define LENGTH = 50;

 int *a, array[LENGTH];

 a = enif_alloc(LENGTH * sizeof(int));

它应该是一个可以返回甚至存储的指针,这样当我从同一个Erlang进程中返回NIF时,我可以访问指针和它引用的内存。

2 个答案:

答案 0 :(得分:2)

在这种特殊情况下,我会使用enif_alloc_resource。创建一个包含指针的结构establish it as a resource object

您也可以将其编码为二进制文件,但我建议不要这样做,因为它允许erlang函数在传回内容之前修改内容。资源类型在erlang端是不透明的,无法修改。

答案 1 :(得分:0)

要从Nif返回二进制文件,请使用enif_alloc_binary和enif_make_binary。然后在Nif中,将访问二进制文件中的指针传递并在参数上使用enif_inspect_binary来获取包含指向数据的指针的ErlNifBinary。