将erlang记录发送到c程序

时间:2016-04-19 23:43:27

标签: c sockets tcp erlang

我正在完成我的任务,其中一部分是将erlang术语发送到c程序,该程序将能够通过已建立的tcp连接相互通信。

我能够发送数字,列表,布尔值,二进制文件,并能够在我的c程序中解码它们以获取已发送的消息。我正在使用ei模块来完成这些工作。在erlang方面,我使用etf编码,如term_to_binary / 1和其他。

那就是说,我想知道如何在erlang端编码的套接字上发送记录并在c-side上解码。 ei有许多函数可以从二进制格式中解码原始数据类型,但不能像记录那样获得复合数据类型。

记录很简单,如-rd(person, {name = "", email = ""}) 我可以发送它

gen_tcp:send(Socket, term_to_binary(#person{name="stack", age = 16})).

如何在c侧解码。

我用google搜索但没有很多资源。请帮忙!谢谢!

1 个答案:

答案 0 :(得分:1)

External Term Format中详细描述了Erlang documentation。有Erlang Interface库应用程序,其中包含ei库,其中包含详细的Encoding, Decoding and Sending Erlang Terms文档。请注意,有更多低级接口ei直接使用以Erlang外部术语格式编码的缓冲区,erl_interface使用ETERM,这等同于BEAM VM内部使用的Erlang术语。

Erlang and OTP in Action一书中还有一整章专门讨论这个主题,其中展示了一个使用ei的实际例子,但只是略微浮出水面。官方文档更加详细和完整。官方文档包含Interoperability Tutorial User's Guide以及Erl_Interface的完整工作代码示例,但不包含使用低级ei的完整示例。