2016-04-19 17 views
4

Ich arbeite an meiner Aufgabe und ein Teil davon sendet Erlang-Begriffe an ein c-Programm, das über eine etablierte TCP-Verbindung miteinander kommunizieren kann.Senden von Erlang-Records an ein c-Programm

Ich konnte Zahlen, Listen, Boolean, Binärdateien und in der Lage, sie in meinem c-Programm zu entschlüsseln, um die gesendete Nachricht zu erhalten. Ich benutze das ei-Modul, um das Zeug zu machen. Auf der Erlang-Seite kodiere ich mit etf wie term_to_binary/1 und anderen.

Das heißt, ich frage mich, wie kann ich Datensätze über diese Buchse auf der Erlang-Seite codiert und Decodierung auf der C-Seite senden. ei hat viele Funktionen, um primitive Datentypen aus einem Binärformat zu dekodieren, aber nicht, um zusammengesetzte Datensätze zu erhalten.

Aufzeichnungen sind einfach wie -rd(person, {name = "", email = ""}) ich es als

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

senden kann, wie ich auf der c-Seite tun dekodieren.

Ich habe gegoogled, aber nicht viele Ressourcen zu diesem Thema. Bitte helfen Sie! Vielen Dank!

Antwort

1

Erlang External Term Format ist ausführlich in der documentation beschrieben. Es gibt Erlang Interface Bibliothek Anwendung, die ei Bibliothek mit detaillierten Encoding, Decoding and Sending Erlang Terms Dokumentation enthalten. Beachten Sie, dass es mehr Low-Level-Schnittstelle ei gibt, die direkt mit im Erlang External Term Format codierten Puffern arbeitet und erl_interface mit ETERM arbeitet, die äquivalent zu den Erlang-Termen sind, die intern in BEAM VM verwendet werden.

Es gibt auch ein ganzes Kapitel zu dem Thema in dem Buch Erlang and OTP in Action gewidmet, die ein praktisches Beispiel mit ei zeigt, aber nur die Oberfläche kratzt. Die offizielle Dokumentation ist viel detaillierter und vollständiger. Offizielle Dokumentation enthält Interoperability Tutorial User's Guide mit vollständigen Beispielen von Arbeitscode mit Erl_Interface, enthält jedoch keine vollständigen Beispiele für die Verwendung von Low-Level ei.