2012-07-04 5 views
3

기본적으로 TCP 연결에서 일부 바이너리 데이터를 받아들이고 C nif를 사용하여 데이터를 해독하고 해독 된 데이터를 반환하는 얼랭 코드를 작성하고 있습니다.바이너리를 erlang nif에 전달

문제는 전달 된 바이너리를 수정하는 방법을 알아낼 수 없다는 것입니다.

이것은 내가 사용하고있는 기능입니다. 누구든지 올바른 방향으로 나를 가리킬 수 있다면, 나는 그것을 감사 할 것입니다.

static ERL_NIF_TERM decrypt(ErlNifEnv* env, ErlNifBinary *data); 

고마워요!

+6

바이너리를 수정하는 것이 올바른 방법이라고 확신하십니까? 바이너리가 VM에 풀링 될 수 있고, 하나의 바이너리를 수정하는 것이 실제로 "관련없는"데이터를 수정할 수도 있다는 것을 이해합니다. 왜 새로운 바이너리를 돌려주지 않습니까? – sarnold

답변

3

을 전달 된 바이너리로 수정할 수 없습니다. 먼저 복사본을 만들고 복사 된 바이너리를 수정 한 다음 복사 된 (수정 된) 바이너리를 다시 호출자에게 반환해야합니다.

공유 이진이 공유 힙에 할당됨을 기억하십시오. 원래를 덮어 쓰면 Erlang의 단일 할당 원칙이 깨지기 때문에 문제가 발생합니다.

자세한 내용은 an example of handling binary arguments in sfmt-erlang NIF code을 참조하십시오.