2016-04-19 6 views
4

私は自分の課題に取り組んでおり、その一部は確立されたtcp接続を介して互いに通信できるcプログラムにerlangの用語を送ります。erlangレコードをCプログラムに送ります

私は数字、リスト、ブール値、バイナリを送信でき、送信されたメッセージを取得するために私のCプログラムでそれらを解読することができました。私はこのことをするためにeiモジュールを使用しています。 erlang側では、term_to_binary/1などのetfを使ってエンコードしています。

私は、erlang側でエンコードされたソケットを介してレコードを送信し、c側でデコードする方法を知りました。 eiには、バイナリ形式からデコードされたプリミティブデータ型を取得するための多くの関数がありますが、レコードのような複合型のデータ型は取得できません。

レコードが

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

がどのように私はC-側でデコードしないように私はそれを送ることができるよう-rd(person, {name = "", email = ""}) 簡単です。

私はグーグルではありますが、これに関する多くのリソースはありません。助けてください!ありがとうございました!

答えて

1

Erlang External Term Formatについては、documentationに詳しく説明されています。 Erlang Interfaceライブラリアプリケーションはeiライブラリを含み、詳細はEncoding, Decoding and Sending Erlang Termsです。 Erlang External Term Formatでエンコードされたバッファを直接扱う低レベルインタフェースeiと、ETERMで動作するerl_interfaceは、BEAM VMで内部的に使用されているErlangの用語と同等です。

書籍Erlang and OTP in Actionには、eiを使用した実用的な例が示されていますが、サーフェスだけが傷ついています。公式文書ははるかに詳細で完全です。公式文書には、のコードが含まれていますが、eiという完全な例は含まれていませんが、Erl_Interfaceのコードの完全な例を含むInteroperability Tutorial User's Guideが含まれています。

関連する問題