2010-11-18 2 views

답변

2

문서에 따르면 iodata() 형식의 콘텐츠 만 보낼 수 있습니다.

Erlang 설명서의 this tutorial에서와 같이 드라이버에 보낼 문자열이 모두 정수와 문자열 인 경우 자체 용어 - 요오드화 문자 인코딩을 사용하는 것이 더 효율적일 수 있습니다. 함수를 사용하여 호출을 드라이버로 직접 전송할 수있는 매핑으로 변환하므로 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'을 사용하여 쉽게 충분히 복잡하다. –