将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 使用 ETERMs 等价于 BEAM VM 内部使用的 Erlang 术语。

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

【讨论】:

以上是关于将erlang记录发送到c程序的主要内容,如果未能解决你的问题,请参考以下文章

Worklight - 将应用程序日志发送到特定日志文件

在 Erlang 中实现 MapReduce 框架

如何创建具有特定大小的 C 结构以通过套接字发送到 DalmatinerDB?

用erlang解析ejabberd数据包

Bash:将数据文件逐行发送到C程序中

C'ant post 使用 Angular http 将帖子发送到 api 路由