2016-04-19 47 views
4

我正在處理我的任務,其中一部分是將erlang條款發送給一個可以通過建立的tcp連接相互通信的c程序。發送erlang記錄到c程序

我能夠發送數字,列表,布爾,二進制文件,並能夠在我的C程序中解碼它們以獲取發送的消息。我正在使用ei模塊來完成這個任務。在erlang方面,我使用etf編碼,如term_to_binary/1和其他。

這就是說,我想知道如何發送記錄在erlang端編碼的套接字和在c端解碼。 ei有許多功能可以從二進制格式解碼原始數據類型,但不能像記錄那樣獲得複合數據類型。

記錄是簡單的像-rd(person, {name = "", email = ""}) 我可以把它作爲

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

我如何解碼的C面。

我已經使用了Google,但沒有太多的資源。請幫忙!謝謝!

回答

1

Erlang External Term Formatdocumentation中有詳細描述。有Erlang Interface庫應用程序包含ei庫與詳細Encoding, Decoding and Sending Erlang Terms文檔。請注意,有更多底層接口ei直接與使用Erlang外部術語格式編碼的緩衝區一起工作,erl_interfaceETERM一起使用,這等同於BEAM VM內部使用的Erlang術語。

在書Erlang and OTP in Action中也有專門討論該主題的整章,它使用ei展示了一個實際的例子,但只是表面劃痕。官方文件更加詳細和完整。官方文檔包含Interoperability Tutorial User's Guide,帶有Erl_Interface的工作代碼的完整示例,但不包含使用低級別ei的完整示例。