erlang学习笔记

安装

Ubuntu Server上: sudo apt-get install erlang

如果安装时下载 太慢,可手工下载deb包( esl-erlang_16.a-rc1_ubuntu_precise_i386.deb ),下完deb文件后,ftp到虚拟机上,用dpkg -i <.deb file>安装(需要首先安装JRE);Ubuntu Server不能更改屏幕大小,也不能copy/paste文本,所以用kitty ssh过去操作比较好;

erlang 语法

代码中逗号,分号,句号的用法:逗号是表达式的分隔符(可以理解为AND),分号是条件分支的分隔符(可以理解为OR),句号是函数结束符(可以理解为END);

参考"http://stackoverflow.com/questions/1110601/in-erlang-when-do-i-use-or-or";

erlang文档

  • 在线版(增量式查找,效果比离线版好):http://www.erlang.org/erldoc

  • 离线版:otp_doc_html_R16A_RELEASE_CANDIDATE.tar.gz

erlang官网下载页上下载Erlang/OTP R16A HTML Documentation File,解压到DOC_HOME下,tr_server中用到的gen_server:start_link/4函数可以在$DOC_HOME\lib\stdlib-1.19\doc下找到html和pdf版的api说明;erlang用到的各个库的api文档都在.\lib文件夹下;erlang用户手册在.\doc目录下,erlang运行时(ERTS)在.\erts-5.10下;

erlang内置函数(BIF)文档在$DOC_HOME\erts-5.10\doc\html\erlang.html中可以查到(或者是对应的pdf文档:$DOC_HOME\erts-5.10\doc\pdf\erts-5.10.pdf的Reference Manual -> erlang部分中),例如apply, list_to_atom等;

erlang编译器

Windows上的erlc居然不支持文件通配符,运行"F:\tcp_rpc>"C:\Program Files\erl5.10\bin\erlc.exe" -o ./ebin ./src/*.erl"提示IO错误,只能用"F:\tcp_rpc>"C:\Program Files\erl5.10\bin\erlc.exe" -o ./ebin ./src/tr_sup.erl"的办法分别编译3个erl源文件;

IDE

erlide

在Eclipse for java developers 4.2中,用 eclipse market搜索erlide并安装成功;(2013-05-13)

See https://github.com/erlide/erlide/wiki/Tutorial-Quick-Start for using this plugin to build a HelloWord erlang program.

其他

erlang发音:elan(哦兰);

多台机器上的erlang节点互相连接

使用erl -name name@ip -setcookie cookiename启动erlang节点,启动后用net_adm:ping('name@ip')进行连接,上午在笔记本和两台服务器上创建3个节点并互联成功,其中笔记本是Win7(IP为10.31.1.30),两个服务器是Ubuntu Server 12.04(IP是10.31.1.113和10.0.7.47),每个节点的-name参数是自己的名字和IP地址,互联的各节点的cookiename需一致;另外Win7可能要关闭防火墙;ip必须是节点的真实IP,如果是hostname,需要有效的DNS,否则无法连接;

Remote shell

113服务器:$ erl -name lc@10.31.1.113 -setcookie test

47服务器:$ erl -name lc@10.0.7.47 -setcookie test

在113上远程连接47:Ctrl + G,然后用r指令,例如:

(lc@10.31.1.113)1> User switch command --> r 'lc@10.0.7.47' --> j 1 {shell,start,[init]} 2* {'lc@10.0.7.47',shell,start,[]} --> c Eshell V5.8.5 (abort with ^G) (lc@10.0.7.47)1>

更多细节:

发起和目标节点上的erl shell都必须已经启动,不需要首先用net_adm:ping建立连接,在113上连接上47后,不能关闭47上的节点,否则remote shell也会随之断开;

113要切换到local shell用"Ctrl+G, j, c "方式;

113要退出本地erlang环境用"Ctrl+G, Ctrl+C, A"方式(Linux下);

113要关闭47上的节点用"q()."命令;

113要关闭连接47的Remote Shell用"Ctrl+G, j, k "方式;

posted on 2014-03-17 18:17  leechau  阅读(353)  评论(0编辑  收藏  举报

导航