Я написал очень простой фрагмент кода на C ++:
#include <iostream>
using namespace std;
int main() {
int message;
cin >> message;
cout << message;
return 0;
}
Я проверил его в оболочке - он возвращает значение, введенное в оболочку.
Но когдаЯ пытаюсь вызвать его из Erlang, он возвращает {exit_status, 0}, что, как я понимаю, означает, что он просто вышел .
Код Эрланга находится здесь:
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.
Как мне подключить мой порт Erlang к этому простому коду 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;
}
Процесс порта Erlang по-прежнему получает {exit_value, 0}.Если я запускаю этот код в оболочке, ввод с клавиатуры не отображается, пока я дважды не нажму Return.