首页 > Erlang并发教程 > 10.7 Erlang并发编程-Erlang进程眼中的端口
2013
11-19

10.7 Erlang并发编程-Erlang进程眼中的端口

BACK TOP文章索引

  1. Erlang进程眼中的端口
  2. 共3条评论

Erlang进程眼中的端口

程序9.2定义了一个简单的Erlang进程,该进程打开一个端口并向该端口发送一串消息。与端口相连的外部对象会处理并回复这些消息。一段时间之后进程将关闭端口。

程序9.2

-module(demo_server).
-export([start/0]).

start() ->
    Port = open_port({spawn, demo_server}, [{packet, 2}]),
    Port ! {self(), {command, [1,2,3,4,5]}},
    Port ! {self(), {command}, [10,1,2,3,4,5]},
    Port ! {self(), {command, "echo"}},
    Port ! {self(), {command, "abc"}},
    read_replies(Port).

read_replies(Port) ->
    receive
        {Port, Any} ->
            io:format('erlang received from port:~w~n', [Any]),
            read_replies(Port)
    after 2000 ->
            Port ! {self(), close},
            receive
                {Port, closed} ->
                    true
            end
    end.

程序9.2中的open_port(PortName, PortSettings启动了一个外部程序。demo_server是即将运行的程序的名字。

表达式Port ! {self(), {command, [1,2,3,4,5]}}向外部程序发送了五个字节(值为1、2、3、4、5)。

为了让事情有意思一点,我们令外部程序具备一下功能:

  • 若程序收到字符串“echo”,则它会向Erlang回复“ohce”。
  • 若程序收到的数据块的第一个字节是10,则它会将除第一个字节以外的所有字节翻倍后返回。
  • 忽略其他数据。

运行该程序后我们得到以下结果:

> demo_server:start().
erlang received from port:{data,[10,2,4,6,8,10]}
erlang received from port:{data,[111,104,99,101]}
true

10.7 Erlang并发编程-Erlang进程眼中的端口》有 3 条评论

  1. 我点开吐槽的时候以为可以看到一些略带笑点的搞笑鉴定,结果他妈的居然有个人在这里开玉器知识课了。。。

  2. 我点开吐槽的时候以为可以看到一些略带笑点的搞笑鉴定,结果他妈的居然有个人在这里开玉器知识课了。。。

  3. 唐舞麟是王东弟弟

留下一个回复

你的email不会被公开。