Erlang Port 小心换行

(金庆的专栏)

Erlang的Port接口使用cin, cout与外部Port进程通信。

一般open_port()用binary模式打开。

Port = open_port({spawn, PortExe},
                     [{packet, 4}, binary, use_stdio]),

此时须小心Port进程在Windows上输出 \n 前会自动添加 \r。
PortExe发送:
   <<10,11,84,101,115,116,77,101,115,115,97,103,101,18,10,10,8,98,98,98,98,98,98,98,98>>
Erlang接收成为:   
<<13,10,11,84,101,115,116,77,101,115,115,97,103,101,18,13,10,13,10,8,98,98,98,98,98>>

需要将Port进程的stdin, stdout设为二进制模式:

void set_binary_mode()
{
#if defined(WIN32)
    int result;
    result = _setmode(_fileno(stdin), _O_BINARY);
    if (-1 == result)
    {
        perror("set mode");
        exit(1);
    }
    result = _setmode(_fileno(stdout), _O_BINARY);
    if (-1 == result)
    {
        perror("set mode");
        exit(1);
    }
#endif
}

时间: 2024-08-12 18:27:07

Erlang Port 小心换行的相关文章

Erlang Port实现调用系统命令并逐行输出执行过程

最近在做一个通过WEB调用系统命令的工具,难点是如何获取执行过程,同时可以逐行输出? 想起以前有看到霸爷提到rebar中封装了类似的功能,于是从rebar_utils中整出了下面的东西,很好用. -module(sh_port). -export([sh/1, sh/2]). %% %% Options = [Option] -- defaults to [use_stdout, abort_on_error] %% Option = ErrorOption | OutputOption | {

Erlang epmd官方文档中文翻译

本文含epmd简介及官方文档之翻译,文档地址 http://erlang.org/doc/man/epmd.html翻译时的版本 R19.1 中英文水平都不咋地,不通顺处海涵,就酱. 简介 Erlang分布式系统中节点是通过节点名字互相连接的,节点名字为[email protected]_ADDRESS格式. epmd是分布式erlang中比较重要的模块.集群中每台机器都有一个epmd进程,这些进程端口号都用同一个端口号(默认4396端口).所有节点启动的时候都会连接到本机对应的epmd进程,它

Erlang的erl与epmd的区别与联系

1.epmd是Erlang Port Mapper Daemon的缩写,完成Erlang节点和IP,端口的映射关系,不同节点间的通信要靠epmd进程进行沟通. 2.erl是启动erlang虚拟机的命令. 3.从实际操作的角度看,只要执行erl选项包含-name 或者-sname就会自动启动epmd和net_kernel.如果由于意外关闭了epmd进程,可以通过/usr/local/lib/erlang/erts-6.0/bin/epmd -daemon 启动epmd(注意版本不同路径也会不同).

[Erlang]通用的erlang优化设置

设置是我在多个项目中通用的,不过根据应用场景的不同,还会有其它细调,就不在这一一说明了.  - Sunface  一. erl启动时参数: +K true 开启epoll调度,在linux中开启epoll,会大大增加调度的效率 +A 100 异步线程池,为某些port调用服务 +P 1024000 最大进程数 +Q 65535 最大port数 +sbt db 绑定调度器,绑定后调度器的任务队列不会在各个CPU线程之间跃迁,结合sub使用,可以让CPU负载均衡的同时也避免了大量的跃迁发生. 注意:

Erlang EPMD

 epmd进程和Erlang节点进程如影随形,在Rabbitmq集群,Ejabberd集群,Couchbase集群产品文档中都会有相当多的内容讲epmd,epmd是什么呢?   epmd 是Erlang Port Mapper Daemon的缩写,全称足够明确表达它的功能了(相比之下,OTP就是一个难以从字面理解的名字);epmd完成Erlang节点和IP,端口的映射关系,比如在我的测试机上, [[email protected] data2]# epmd -names epmd: up and

《erlang程序设计》学习笔记-第3章 分布式编程

http://blog.csdn.net/karl_max/article/details/3985382 1. erlang分布式编程的基本模型 (1) 分布式erlang:这种模型可以让我们在一个紧密耦合的计算机集群上编写程序. (2) 分布式erlang应用程序运行在一个可个这个进程的环境中.一个局域网的不同集群之间,但在同一个防火墙里面. (3) 基于套接字的分布式应用:使用TCP/IP套接字,我们可以编写运行在非信任环境中的分布式应用程序.2. 编写分布式程序的步骤: (1)先在一个非

[Erlang_Question14]怎样模拟节点互连后的各种失败情况?

情景: 当节点群互连时,会通过心跳包检查所连接节点是不是连接正常,这个心跳时间默认为60s,可以通过 net_kernel:set_net_ticktime(600). 来重设这个时间值,怎么测试? 每次我把其中一个节点kill掉后,与之想连的节点就会立即收到nodedown消息,根本无法测试这个ticktime是不是生效. 原因: 在Erl Doc里面关于节点互连时有一个关于节点间心跳检查的片段: http://www.erlang.org/doc/man/kernel_app.html ne

Ejabberd作为推送服务的优化手段(转)

AVOS Cloud目前还在用Ejabberd做Android的消息推送服务.当时选择Ejabberd,是因为Ejabberd是一个发展很长时间的XMPP实现,并且基于Erlang,设想能在我们自主研发的Push Server起来之间顶上一段时间. 我们自主研发的Push Server预计本月中旬就上线了.但是Ejabberd却先顶不住了.Ejabberd做推送,本身就有劣势,比如XMPP协议的冗余,XMPP协议本来就是IM协议,对推送这个简单的场景还是太复杂了一些.Ejabberd Clust

RabbitMQ in Action (2): Running and administering Rabbit

Server management the Erlang node and the Erlang application Starting nodes multiple Erlang applications can run inside the same node an application on node asparagus can call functions in applications running on node artichoke as though those functi