我想创建一个用C实现的链表数据结构。想法是创建一个链表
ll:new() -> listId.
上面的ListId表示某种类型的“指针”,它将被传递回C代码,该代码将作为列表上的某种类型的句柄。因为我想象列表可能变得非常非常大,所以我希望不必来回传递列表。创建链接列表后,用户将以明显的方式与其进行交互:
ll:add(ListId, Elt)
ll:add_after(ListId, Pos, Elt)
我想我会通过Erlang的NIF功能来做到这一点。现在,为了实现这一点,C方必须在多个add,add_after等调用中维护列表。
在直接C中,我将拥有一个用户与之交互的主要功能,这将使程序保持活动状态,从而保持链表在用户与程序交互的生命周期中保持不变。据我了解,NIF使用的C代码没有主要功能。也就是说,每次调用NIF都是一种完成的命题。
有人可以给我一些关于如何(假设它是合适的)可以利用NIF与需要在多个调用中保持状态的C代码交互的指针吗?我希望这很清楚!
答案 0 :(得分:1)
检查the documentation是否有资源对象。如果创建它的进程崩溃,NIF API甚至允许您使用erlang GC到GC创建的列表!
答案 1 :(得分:0)
C中的'static'变量可以保持调用之间的值,但我强烈建议不要这样做。如果你需要一些状态,最好在erlang中查看'ports'。