【Erlang新手成长日记】Erlang端口与外部C程序交互
2012-09-01 15:05
253 查看
参考文档:
《Programming Erlang》,第12章:Interfacing Techniques
创建C源文件:
hello.c 具体函数的实现
hello.erl
编译C源文件,生成可执行文件
编译Erlang源文件,生成.beam文件
《Programming Erlang》,第12章:Interfacing Techniques
创建C源文件:
hello.c 具体函数的实现
hello.erl
-module(hello). -export([start/0, stop/0]). -export([twice/1, sum/2]). -define(PORTNAME, ?MODULE). start() -> Fun = fun() -> register(?PORTNAME, self()), process_flag(trap_exit, true), Port = open_port({spawn, "./hello"}, [{packet, 2}]), loop(Port) end, spawn(Fun). stop() -> ?PORTNAME ! stop. twice(X) -> call_port({twice, X}). sum(X, Y) -> call_port({sum, X, Y}). call_port(Message) -> ?PORTNAME ! {call, self(), Message}, receive {?PORTNAME, Result} -> Result end. loop(Port) -> receive {call, Caller, Message} -> Port ! {self(), {command, encode(Message)}}, receive {Port, {data, Data}} -> Caller ! {?PORTNAME, decode(Data)} end, loop(Port); stop -> Port ! {self(), close}, receive {Port, closed} -> exit(normal) end; {'EXIT', Port, Reason} -> exit({port_terminated, Reason}) end. encode({twice, X}) -> [1, X]; encode({sum, X, Y}) -> [2, X, Y]. decode([Int]) -> Int.
编译C源文件,生成可执行文件
gcc -o hello hello.c hello_driver.c erl_communication.c
编译Erlang源文件,生成.beam文件
erlc hello.erl
相关文章推荐
- 【Erlang新手成长日记】Erlang模块学习之lists
- 【Erlang新手成长日记】文件读写
- 【Erlang新手成长日记】HTTP客户端
- 【Erlang新手成长日记】Erlang开源项目推荐
- 如何使用Erlang port 和外部程序交互
- 【Erlang新手成长日记】JSON编码与解码
- 【Erlang新手成长日记】Mnesia数据库CRUD操作
- Erlang中通过Port与外部程序交互
- 【Erlang新手成长日记】erl手册
- Android成长日记日记-Debug调试程序
- 在程序中与外部网站进行交互访问实例
- 【python系列】Python启动外部程序,以及进程间交互
- SilverLight浏览器交互之:SilverLight程序调用外部Html中的Javascript方法(附源码)
- FScommand()实现与外部程序的信息交互
- SilverLight浏览器交互之:使用SilverLight程序嵌套外部Html页(附源码)
- erlang调用外部程序如何得到其退出状态
- QProcess与外部程序的调用(可以通过设置管道来交互)
- iPhone网络编程初体验-简单的聊天程序(适合新手学习客户端服务器交互)
- SilverLight浏览器交互之:使用SilverLight程序把外部Html页作为资源进行绘图(附源码)
- 【转】外部.NET程序与AutoCAD交互[…