我已經寫了非常簡單的C++代碼段:如何將Erlang連接到C++?
#include <iostream>
using namespace std;
int main() {
int message;
cin >> message;
cout << message;
return 0;
}
我在殼測試它 - 它返回這是在外殼的輸入的值。
但是,當我嘗試從Erlang調用它時,它返回{exit_status,0},據我瞭解,它意味着它只是exited。
Erlang的代碼是在這裏:
p(Param) ->
?DBG("Starting~n", []),
Cmd = "./Echo\n",
Port = open_port({spawn,Cmd}, [binary,{packet, 4}, exit_status]),
Payload = term_to_binary(list_to_binary(integer_to_list(Param))),
?DBG("Opened the port: ~w~n", [Port]),
erlang:port_command(Port, Payload),
?DBG("Sent command to port: ~w~n", [Payload]),
?DBG("Ready to receive results for command: ~w~n", [Payload]),
receive
{Port, {data, Data}} ->
?DBG("Received data: ~w~n", [Data]),
{result, Text} = binary_to_term(Data),
Blah = binary_to_list(Text),
io:format("~p~n", [Blah]);
Other ->
io:format("Unexpected data: ~p~n", [Other])
end.
如何將我的二郎口連接到這個簡單的C++代碼?
UPD:
改變了C++代碼本(無用版本):
#include <iostream>
using namespace std;
int main() {
int message;
cin.read(reinterpret_cast<char *>(&message), 4);
cout.write(reinterpret_cast<char *>(&message), 4);
return 0;
}
二郎端口過程仍然得到{exit_value,0}。如果我在shell中運行此代碼,直到我按Return兩次,鍵盤輸入纔會被回顯。
你的問題無關,與C++。您正在尋找的是如何連接衍生進程的標準I/O文件。 –
您能詳細解釋一下嗎?謝謝! – skanatek
但用第二種形式,您正在等待終端的4個字節,例如。也許'\ n \ r'兩次。我強烈建議在Erlang和C++兩邊同時拋棄二進制協議,並且只使用文本,除非你有明確的性能要求。 – Useless