4

Francesco Cesarini の「Erlang Programming」本には、Erlang を Ruby に接続する (ポート経由で実装された) 優れた簡単に開始できる例が記載されています。

module(test.erl).
compile(export_all).    

test() ->
    Cmd = "ruby echoFac.rb",
    Port = open_port({spawn, Cmd}, [{packet, 4}, use_stdio, exit_status, binary]),
    Payload = term_to_binary({fac, list_to_binary(integer_to_list(23))}),
    port_command(Port, Payload),
    receive
     {Port, {data, Data}} ->
      {result, Text} = binary_to_term(Data),
      Blah = binary_to_list(Text),
      io:format("~p~n", [Blah])
    end.

ただし、この例で使用されている Ruby コードは Erlictricity ライブラリを使用しており、プログラマの低レベルの処理をすべて実行します。

require 'rubygems'
require 'erlectricity'
require 'stringio'
def fac n
if (n<=0) then 1 else n*(fac (n-1)) end
end
receive do |f|
f.when(:fac, String) do |text|
n = text.to_i
f.send!(:result, "#{n}!=#{(fac n)}")
f.receive_loop
end
end

このわずかに変更された test.erl コードを使用しようとしました。

test(Param) ->
        Cmd = "./add",
        Port = open_port({spawn, Cmd}, [{packet, 4}, use_stdio, exit_status, binary]),
        Payload = term_to_binary({main, list_to_binary(integer_to_list(Param))}),
...

非常に単純な C ファイルと話すには:

/* add.c */
#include <stdio.h>
int main(int x) {
 // return x+1;
 printf("%i\n",x+1);
}

しかし残念ながら、test.erl の受信ループはメッセージを受け取ります。{#Port<0.2028>,{exit_status,2}}

私の質問は、C/C++ で同様のものを実装することは可能ですか? Erlictricity for Ruby と同様のポートを介して Erlang が C/C++ と通信するための既製のライブラリはありますか?

4

2 に答える 2

1

Erlang/OTP オンライン ドキュメントの相互運用性チュートリアルを読むことから始めます: http://erlang.org/doc/tutorial/users_guide.html。C プログラムと通信する場合、標準入力から読み取り、標準出力に書き込む C コードを記述するだけで、これが Erlang ポートに接続されます。http://manning.com/loganの第 12 章も読むことができます。

于 2011-10-13T07:46:36.517 に答える
0

ここでチェックアウトしましたかErl Interface: http://www.erlang.org/doc/tutorial/erl_interface.html?
私が見つけたその他の興味深いリンクを以下に示し

ます
。 /index.html
http://dukesoferl.blogspot.com/2010/01/minor-erlang-interface-tricks.html

これらがお役に立てば幸いです :)

于 2011-10-08T09:08:51.537 に答える