Erlang 基础学习 9 Interfacing Techniques


• Erlang和外部程序的交互通过一种叫port的技术来通信,为了保证安全,外部进程的crash不会影响到erlang的vm本身
• 具体过程是这样的
• 1. 首先通过open_port来启动外部程序,并绑定一个erlang进程在这个port上
• 2. 这个绑定的进程拥有所有和外部程序的接口,所有和外部程序的交互都通过他来走
• 3. 绑定的进程和外部程序之间是通过二进制流来交互的

Ports
• Port = open_port(PortName, PortSettings)
• PortName的格式可以为:
• {spawn, Command}  启动外部程序Command
• {fd, In, Out} 允许进程访问所有当前打开的文件
• PortSettings可以为:
• {packet, N}  包大小字节数(1,2,4)
• stream 流方式
• {line, Max} 行方式,超过Max将会被截断
• {cd, Dir}  给({spawn,Command}启动的程序设定启动的目录
• {env, Env}给({spawn,Command}启动的程序设定环境变量,格式[{Name1,Value1},{Name2,Value2}]

• 对这个得到的Port,可以类似Pid一样的操作,可以发送的消息有:
• Port ! {PidC, {command, Data}} 发送一个命令
• Port ! {PidC, {connect, Pid1}} 重新连接到Pid1上
• Port ! {PidC, close}
• 连接的进程会收到的消息格式为:
• {Port, {data, Data}}

Linked-In Drivers
• 和java的jni类似,erlang也允许外部程序以动态连接库的方式嵌入运行
• 使用方式和spawn出来的一样
• 不过不推荐使用,因为如果这个外部的驱动挂了,有可能会导致整个erlang系统挂掉


你可能感兴趣的:(erlang,jni)