Gibt es in der anderen Richtung ein Äquivalent von driver_output_term
, d. H. Senden eines Erlang-Terms an den Treiber, ohne ihn zuerst in einen Iolist umzuwandeln? Wenn nicht, sollte ich vermutlich meinen Ausdruck mit term_to_binary
konvertieren und auf der C-Seite mit ei
analysieren; irgendwelche guten Beispiele?Senden von Termen anstelle von Iolists an einen Erlang-Treiber
1
A
Antwort
2
Laut der Dokumentation können Sie nur Dateien senden, die im Format iodata()
vorliegen.
Wenn alles, was Sie an den Treiber senden möchten, ganze Zahlen und Strings ist, könnte es effizienter (und viel einfacher) sein, Ihre eigene Wort-zu-Jodata-Codierung zu verwenden, wie in this tutorial aus der Erlang-Dokumentation. Sie verwenden eine Funktion, um ihre Aufrufe in ein Mapping zu konvertieren, das direkt an den Treiber gesendet werden kann und daher nicht mit term_to_binary()
codiert werden muss.
encode({foo, X}) -> [1, X];
encode({bar, Y}) -> [2, Y].
Diese Zuordnung ist möglich, wenn X
und Y
angenommen werden kleine ganze Zahlen sein. auf der C-Seite wird das erste Byte des Eingangspuffers eingeschaltet auf die entsprechende Funktion unter Verwendung des zweiten Byte als Argument zu nennen:
static void example_drv_output(ErlDrvData handle, char *buff, int bufflen)
{
example_data* d = (example_data*)handle;
char fn = buff[0], arg = buff[1], res;
if (fn == 1) {
res = foo(arg);
} else if (fn == 2) {
res = bar(arg);
}
driver_output(d->port, &res, 1);
}
Verwandte Themen
- 1. Senden von Quellcode an einen externen Server
- 2. Senden von iPhone Videos an einen Server
- 3. Senden von SIGINT an einen Subprozess von Python
- 4. FormData hängt an $ _POST anstelle von $ _FILES?
- 5. Senden von Daten an MapActivity
- 6. Senden von Formulardaten an Knotenserver
- 7. Summierung einer Reihe gegebenen n als Anzahl von Termen (Rekursion)
- 8. Wie kann ich ASCII senden anstelle von Code senden
- 9. Senden von XML von Silverlight an WCF
- 10. Einen Anhang von Shiny senden
- 11. Senden von Nachrichten an Objekte
- 12. Senden von Daten an Worker
- 13. Postanforderung an einen Server senden
- 14. Senden von Daten von angularjs an django
- 15. Senden von Code von vim an stata
- 16. Senden von Nachrichten an Gerrit von Jenkins?
- 17. Senden von JWT von AngularJS an Node.js
- 18. Kontrollkästchen zum Senden von Werten anstelle von boolesch
- 19. Senden von JSON-Objekten in DataTables aaData anstelle von Arrays
- 20. Senden von Nachrichten an einen Tornado-Websocket-Server über PHP?
- 21. Senden von Bildern über WhatsApp an einen bestimmten Empfänger (Android)
- 22. Einen Wert an ein Array von Objekten senden
- 23. Senden von Großbuchstaben an einen TextEdit während instrumentierter Tests
- 24. Senden an einen https Rest-Endpunkt unter Verwendung von node.js
- 25. Wie senden Sie einen Job von Code an Spark?
- 26. So senden Sie ein Bild von Imageview an einen Server
- 27. Senden von SVN-Commits an einen RSS-Feed
- 28. Python Multiprocessing: Senden von Daten an einen Prozeß
- 29. Senden von Daten an einen separaten Sitenav-Controller
- 30. Daten von node.js an einen Coldfusion-Ruhedienst senden
Leider meine Bedingungen komplex genug sind, dass die Verwendung von 'ei' einfacher ist. –