我已经写了非常简单的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