2010-11-18 10 views

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); 
} 
+0

Leider meine Bedingungen komplex genug sind, dass die Verwendung von 'ei' einfacher ist. –

Verwandte Themen