0

我想创建一个用 C 实现的链表数据结构。我的想法是创建一个链表

ll:new() -> listId.

上面的 ListId 表示某种类型的“指针”,它将被传递回 C 代码,该 C 代码将用作列表上的某种类型的句柄。我希望不必来回传递列表本身,因为我想象列表可能会变得非常非常大。一旦创建了链表,用户就会以明显的方式与之交互:

ll:add(ListId, Elt)
ll:add_after(ListId, Pos, Elt)

我想我会通过 Erlang 的 NIF 功能来做到这一点。现在,为了使其工作,C 端必须跨多个调用 add、add_after 等维护列表。

在直接的 C 语言中,我将有一个用户与之交互的主函数,该函数将使程序保持活动状态,从而在用户与程序交互的整个生命周期内保持链接列表的持久性。据我了解,NIF 使用没有主要功能的 C 代码。也就是说,每次调用 NIF 都是一次性的命题。

有人可以给我一些关于如何(假设它是适当的)可以利用 NIF 与需要在多个调用中保持状态的 C 代码交互的指示吗?我希望这很清楚!

4

2 回答 2

1

检查资源对象的文档。NIF API 甚至允许您使用 erlang GC 来 GC 您创建的列表,以防创建它的进程崩溃!

于 2012-01-25T18:37:17.503 回答
0

C 中的“静态”变量可以在调用之间保持值,但我强烈不推荐这种方式。如果您需要一些状态,最好查看 erlang 中的“端口”。

于 2012-01-25T17:05:13.233 回答