gpt4 book ai didi

c++ - 如何将 Erlang 连接到 C++?

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:59 24 4
gpt4 key购买 nike

我写了一段非常简单的 C++ 代码:

#include <iostream>
using namespace std;

int main() {

int message;

cin >> message;
cout << message;
return 0;
}

我已经在 shell 中对其进行了测试 - 它返回一个在 shell 中输入的值。

但是当我尝试从 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.

如何将我的 Erlang 端口连接到这个简单的 C++ 代码?

更新:

将 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}。如果我在 shell 中运行此代码,则在我按 Return 两次之前不会回显键盘输入。

最佳答案

您知道提取运算符 cin >> 需要格式化输入,对吧?也就是说,它会提取一个表示整数的字符串,但可能无法很好地处理 4 字节二进制整数或 Erlang 发送的任何内容。

如果要读取二进制数据,使用

cin.read(reinterpret_cast<char *>(&message), 4);
cout.write(reinterpret_cast<char *>(&message), 4);

例如。或者,当然,在 Erlang 端编写和接收文本。

关于c++ - 如何将 Erlang 连接到 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7806618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com