将erlang记录发送到c程序
Posted
技术标签:
【中文标题】将erlang记录发送到c程序【英文标题】:sending erlang records to a c program 【发布时间】:2016-08-12 09:31:38 【问题描述】:我正在处理我的任务,其中一部分是将 erlang 术语发送到一个 c 程序,该程序将能够通过已建立的 tcp 连接相互通信。
我能够发送数字、列表、布尔值、二进制文件,并能够在我的 c 程序中对它们进行解码以获取发送的消息。我正在使用 ei 模块来做这些事情。在 erlang 方面,我使用 etf 进行编码,例如 term_to_binary/1 等。
也就是说,我想知道如何通过在 erlang 端编码并在 c 端解码的套接字发送记录。 ei 有许多函数可以从二进制格式解码原始数据类型,但不能像记录那样获得复合数据类型。
记录很简单,例如-rd(person, name = "", email = "")
我可以发送为
gen_tcp:send(Socket, term_to_binary(#personname="stack", age = 16)).
如何在 c 端解码。
我已经用谷歌搜索过,但没有很多关于这方面的资源。请帮忙!谢谢!
【问题讨论】:
【参考方案1】:Erlang External Term Format在documentation中有详细描述。有 Erlang Interface 库应用程序,其中包含 ei
库和详细的 Encoding, Decoding and Sending Erlang Terms 文档。请注意,有更多的低级接口ei
直接使用以 Erlang 外部术语格式编码的缓冲区,erl_interface
使用 ETERM
s 等价于 BEAM VM 内部使用的 Erlang 术语。
Erlang and OTP in Action 书中还有一整章专门讨论该主题,其中展示了一个使用 ei
的实际示例,但只是触及了表面。官方文档更加详细和完整。官方文档包含Interoperability Tutorial User's Guide 和Erl_Interface 工作代码的完整示例,但不包含使用低级ei
的完整示例。
【讨论】:
以上是关于将erlang记录发送到c程序的主要内容,如果未能解决你的问题,请参考以下文章