2010-11-18 18 views

答えて

2

ドキュメントによれば、iodata()形式のものしか送信できません。

Erlangのドキュメントのthis tutorialのように、ドライバに送信するすべてが整数と文字列の場合は、独自のterm-to-iodataエンコーディングを使用する方が効率的(かつ簡単になる)かもしれません。彼らは関数を使用して、呼び出しを直接ドライバに送ることができるマッピングに変換するので、term_to_binary()を使ってエンコードする必要はありません。 XYが小さな整数であると想定される場合

encode({foo, X}) -> [1, X]; 
encode({bar, Y}) -> [2, Y]. 

このマッピングは実現可能です。 C側で は、入力バッファの最初のバイトは、引数として第二のバイトを使用して、適切な関数を呼び出すときに切り替えた:

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

残念ながら、私の用語は、 'ei'を使用して簡単にあることを十分に複雑です。 –