我想创建一个在C中实现的链表数据结构
ll:new() -> listId.
上面的ListId表示某种类型的"指针",它将被传递回C代码,C代码将充当列表上的某种类型的句柄。我希望不必来回传递列表,因为我认为列表可能会变得非常大。一旦创建了链接列表,用户就会以明显的方式与之交互:
ll:add(ListId, Elt)
ll:add_after(ListId, Pos, Elt)
我想我会通过Erlang的NIF功能来做到这一点。现在,为了实现这一点,C端必须在多个调用之间维护列表,以添加、add_after等。
在直C中,我有一个用户交互的主要功能,它将保持程序的活力,从而在用户与程序交互的整个生命周期中保持链表的持久性。据我所知,NIF使用的是没有主函数的C代码。也就是说,每个对NIF的调用都是一个一次性的命题。
有人能给我一些关于如何(假设合适)利用NIF与C代码交互的建议吗?C代码需要在多个调用中保持状态?我希望这是清楚的!
查看文档中的资源对象。NIF API甚至允许您在创建列表的进程崩溃时使用erlang GC来GC您创建的列表!
C中的"static"变量可以在两次调用之间保持值,但我强烈建议不要这样做。如果你需要一些州,最好看看erlang的"港口"。