c - 将消息从 C 传递到 erlang

标签 c erlang message

我尝试从 C 代码向 erlang 发送消息。我使用 EI 图书馆。

我的 C 代码:

int main (int argc, char** argv)
{
  erl_init (NULL, 0);

  extern const char *erl_thisnodename(void);
  extern short erl_thiscreation(void);

  #define SELF(fd) erl_mk_pid(erl_thisnodename(), fd, 0, erl_thiscreation())

  ETERM *arr[2], *emsg;

  int sockfd, creation=1;

  arr[0] = SELF(sockfd);
  arr[1] = erl_mk_atom("ok");
  emsg   = erl_mk_tuple(arr, 2);

  erl_reg_send(sockfd, "my_server", emsg);
  erl_free_term(emsg);

  return (EXIT_SUCCESS);
}

还有我的 erlang 代码:

start() ->
    Pid = spawn(?MODULE, loop, []),
    register(my_server, Pid).

loop() ->
    receive
        {ok} ->
            io:format("Ok received \n"),
            loop();
        stop ->
            stop;
        _ ->
            io:format("Somethig else \n")
    end.    

stop() ->
    my_server ! stop.

但是当我运行我的 C 应用程序时,erlang 应用程序什么也没收到。怎么了?

我得到错误:

[启用使用 libthread_db 进行线程调试]

程序收到信号 SIGSEGV,段错误。 ei_mutex_lock()中的0x08055fac

谢谢。

最佳答案

至少,您的 C 程序将一个未初始化的变量 (sockfd) 传递给 erl_mk_pid() 函数,并在稍后调用 erl_reg_send ()。这可能是一个很好的起点。

关于c - 将消息从 C 传递到 erlang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133231/

相关文章:

winapi - 所有调整大小操作的 Windows 消息

c - C/C++ 中的多线程无需等待线程完成

c - 如何让 sscanf 在具有结构的 unix 中运行?

list - 比较两个列表是否相等的惯用方式是什么?

architecture - 用功能语言实现ESB(企业服务总线)

java - java try/catch 的问题

c - 基本框图未显示

c++ - 创建线程时设置 CPU 亲和性

erlang - 在 erlang 中构建堆栈

java - 通过过滤器设置 FacesMessage