Erlang: проблема с crypo: sha () - PullRequest
1 голос
/ 28 июля 2011

Это работает в моей оболочке erlang:

1> U = default_user_name().
2> crypto:start().
3> crypto:sha(U).
4> crypto:stop().

Но когда я компилирую это:

default_pw() ->
    U = default_user_name(),
    crypto:start(),
    crypto:sha(U),
    crypto:stop().

И запускаю его в оболочке erlang, я получаю это:1008 * 1> person: default_pw ().

** ошибка исключения: неверный аргумент

 in function  port_control/3

    called as port_control(crypto_drv04,5,<<"jDoe">>)

 in call from crypto:control/2

Два вопроса:

1) Что я делаю не так?

2) Кажется, мне нужно запустить и остановить криптосервер.Но есть ли лучшее место, чтобы начать и остановить его в моем приложении?

Большое спасибо,

LRP

1 Ответ

4 голосов
/ 28 июля 2011

Полученная ошибка указывает на то, что криптографическое приложение не было запущено. Простой способ запустить его - просто добавить его в качестве параметра к erl, например:

$ erl -s crypto

Я взглянул на текущую реализацию crypto и заметки о прошлом выпуске erlang, и я пришел к следующим выводам (кто-то, пожалуйста, исправьте меня, если я ошибаюсь):

  1. Выпуски Erlang <14A требуют крипто-запуска перед вызовом каких-либо функций, потому что библиотека использовала драйвер порта. Это имеет смысл, потому что я получил ошибку, которую вы описали с 13B04 после того, как не запустил шифрование. </li>
  2. Erlang релизы> = 14A не требуют запуска криптографии, так как реализация теперь использует NIF. Это имеет смысл, потому что текущая реализация crypto_server.erl представляет собой просто шаблон gen_server, а на 14B03 мне не нужно запускать приложение, чтобы заставить crypto:sha/1 работать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...