Есть ли эквивалент driver_output_term
в другом направлении, то есть отправка термина Erlang водителю, не преобразовывая его сначала в iolist? Если нет, я, по-видимому, должен преобразовать свой термин, используя term_to_binary
, и проанализировать его на стороне C с помощью ei
; любые хорошие примеры?Отправка терминов вместо iolists в драйвер Erlang
1
A
ответ
2
Согласно документам, вы можете отправлять материалы только в формате iodata()
.
Если все, что вы хотите отправить водителю, это целые числа и строки, возможно, было бы более эффективно (и намного проще) использовать вашу собственную кодировку от термина к йодату, как в this tutorial из документации Erlang. Они используют функцию для преобразования своих вызовов в сопоставление, которое может быть отправлено непосредственно в драйвер, и поэтому не нужно кодировать, используя term_to_binary()
.
encode({foo, X}) -> [1, X];
encode({bar, Y}) -> [2, Y].
Это отображение является возможным, если X
и Y
предполагаются небольшие целые числа. На стороне С, первый байт буфера ввода переключается на, чтобы вызвать соответствующую функцию, используя второй байт в качестве аргумента:
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);
}
Смежные вопросы
- 1. Преобразование терминов erlang в строку или декодирование erlang binary
- 2. Эффективный драйвер порта Erlang
- 3. Как скомпилировать драйвер Erlang?
- 4. драйвер MongoDB для Erlang
- 5. Как установить драйвер mongodb erlang?
- 6. Форматирование терминов Erlang без преобразования списков в строки
- 7. Почему драйвер драйвера Erlang отличается от ожидаемого?
- 8. Драйвер порта Erlang, взаимодействующий с программой C
- 9. отправка записей erlang в программу c
- 10. Отправка двоичных файлов в Erlang по TCP
- 11. Пользовательский заказ терминов вместо алфавитного заказа
- 12. Есть ли способ просмотреть хранилище терминов erlang (ETS)
- 13. отправка данных между erlang и C++
- 14. Отправка рассылок вместо строк
- 15. Отправка больших файлов между узлами erlang
- 16. Используйте erlang as/вместо ожидания скрипта
- 17. Erlang: Взаимодействие с Xalan: драйвер порта или nif?
- 18. Отправка SQL DataRow вместо объекта
- 19. angularJS отправка ВАРИАНТОВ вместо POST
- 20. Erlang Multicast
- 21. отправка объекта сына вместо отца
- 22. Отправка больших списков между процессами в Erlang/Elixir
- 23. Отправка строковых данных из Java/Erlang в Ada
- 24. отправка исходного двоичного кода с использованием tcp в erlang
- 25. Отправка сообщения на удаленные узлы (узлы) в erlang
- 26. матрица терминов документов, использующая список терминов
- 27. Elasticsearch - предложения автозаполнения слов/терминов/токенов вместо целых документов
- 28. Отправка отчета TestNG в Stout вместо файла
- 29. Отправка несколько гекса в массиве байт вместо
- 30. Отправка в новое действие вместо сообщения
К сожалению, мои условия достаточно сложны, что использование 'ei' проще. –