将二进制文件传递给erlang nif

时间:2012-07-04 01:26:04

标签: c erlang erl erlang-nif

我正在编写一些基本上接受来自TCP连接的二进制数据的Erlang代码,然后使用C nif来解密数据并返回解密数据。

问题在于我似乎无法弄清楚如何修改传入的二进制文件。

这是我正在使用的功能。如果有人能指出我正确的方向,我将不胜感激。

static ERL_NIF_TERM decrypt(ErlNifEnv* env, ErlNifBinary *data);

谢谢!

1 个答案:

答案 0 :(得分:3)

您无法修改传递的二进制文件。您需要首先制作副本并修改复制的二进制文件,然后将复制的(=已修改的)二进制文件返回给调用者。

记住二进制文件是在共享堆中分配的;如果你覆盖原文,你将遇到麻烦,因为这违反了Erlang单一赋值的原则。

有关详细信息,请参阅an example of handling binary arguments in sfmt-erlang NIF code