http://blog.csdn.net/karl_max/article/details/3976372

1. erlang:halt()可以即刻停止系统运行。

2. q()命令可以完成文件和数据库的一些处理后再退出。它是init:stop()的一个shell别名

3. erlang可以动态加载代码,正在运行的代码可以在重新编译后动态加裁而不用停止程序的运行。

4. 模块加载相关函数:

code:get_path() %% 可以获取当前加载路径的设定值。

code:all_loaded() %% 获取所有已经加载的模块。

code:clash() %% 看加载的模块是否有冲突。

另外

@spec code:add_patha(Dir) => true | {error, bad_directory} %% 增加一个新的目录到加载路径的开头。

@spec code:add_pathz(Dir) => true | {error, bad_directory} %% 增加一个新的目录到加载路径的末尾。

5. 启动erlang时增加加载路径:

erl -pa Dir1 -pa Dir2 ... -pz DirK1 -pz DirK2

其中-pa相当于add_patha,-pz相当于add_pathz

6. 在erlang的home目录下(或当前目录下)可以加一个.erlang文件,在这个文件中可以写一些erlang代码,erlang在启动时首先执行这里面的代码。

一般情况一下可以将加载目录的命令放到这个。

如果不清楚当前系统下erlang的home目录,可以用init:get_argument(home).来获取。

当前目录下的.erlang文件比home目录下的.erlang文件的优先级要高。

7. 除了在shell中运行一个模块外,还有以下的方法:

方法一:命令行下编译运行

$ erlc hello.erl

$ erl -noshell -s hello start -s init stop

%% -noshell的意思是关闭shell

%% -s hello start是运行hello模块的start函数

%% -init stop的意思是在运行完apply(hello, start, [])后,运行init模块的stop函数退出

%% -s命令可以运行任何多个

%% 可以加-pa/-pz命令选项在这个命令行中

%% 可以将这个命令行写到一个shell脚本中(如bash脚本),这样就可以直接执行脚本平启动erlang程序了。

%% 在windows下可以写一个bat文件,将这个命令写入。

方法二:将程序当作escript脚本运行(不用编译),只有erlang R11B-4以后的版本才支持escript,在windows下不行

#!/usr/bin/env escript

main(_) -> io:format("Hello world/n"). %% 这个函数需要是main,escript从这个函数开始

方法三:当程序需要参数时,如何在命令行输入参数。

-s选项后面是:ModName FuncName Args,其中Args是一个原子的参数列表。所以我们在程序中最好有一个处理命令行参数的函数。

像这样: main([A]) -> I = list_to_integer(atom_to_list(A)), ... %% 这里只接收一个参数,如果需要两个可以这样main([A, B]) -> ...

escript与其它的脚本一样,运行时直接将参数放到后面就可以了。

8. atom_to_list(Atom) -> string 可以获取原子的字符串形式

9. list_to_integer(List) -> int 可以获取一个字符串的整数形式

10. 快速脚本:用-eval在命令行上直接运行一个erlang表达式,这个方法没什么大用途,我在windows测试好像没有显示什么内容。

erl -eval 'io:format("Memory: ~p~n", [erlang:memory(total)]).' -noshell -s init stop

11. 一个makefile模板

# leave these lines alone

.SUFFIXES: .erl .beam .yrl # .yrl文件是erlang解析生成器程序(yecc)的解析定义文件

.erl.beam:

erlc -W $<

.yrl.erl:

erlc -W $<

ERL = erl -boot start_clean

# edit the lines below

MODS = module1 module2 /

module3 ... special1 .../

muduleN

all: compile

compile: ${MODS:%=%.beam} subdirs

#特殊情况,特殊编译

special1.beam: special1.erl

${ERL} -Dflag1 -W0 special1.erl

#运行程序

application1: compile

${ERL} -pa Dir1 -s application1 start Arg1 Arg2

#编译子目录,子目录中也有makefile

subdirs:

cd dir1; make

cd dir2; make

clean:

rm -rf *.beam erl_crash.dump #erl_crash.dump是erlang的崩溃转存文件

cd dir1; make clean

cd dir2; make clean

12. 一个精简makefile

.SUFFIXES: .erl .beam

.erl.beam:

erlc -W $<

ERL = erl -boot start_clean

MODS = module1 module2 module3

#编译加运行

all: compile

${ERL} -pa Dir1 -s module start

compile: ${MODS:%=%.beam}

clean:

rm -rf *.beam erl_crash.dump

13. erlang shell中有一个emacs编辑器中的行编辑命令的一个子集。对于不用emacs的人没有什么用,比如我。

14. erlang启动时带有一个-detached选项,它后在后台运行

15. erlang启动时带有一个-heart Cmd选项,系统会启动一个监视进程,如果发现erlang进程死亡,监视进程就会执行Cmd,通常Cmd会重启Erlang系统。

16. 如果调用一个eralng函数时发生undef错误,可能是以下几种原因:

(1)系统中不存在这个模块或函数,可能是拼写错误。

(2)系统中有这个模块,但没有编译。

(3)已经编译了,但它所在的目录不在erlang的加载路径中。

(4)加载了几个不同版本,我们可以通过code:clash()函数来看一下是否有重名的模块。

17. JCL(Job Control Language)模式:在erlang shell中按下Ctrl+G会进入JCL模式,可以输入h寻求帮助。

18. man:在Unix系统的命令行中执行:$ erl -man lists可以看到lists模块的帮助。当然要首先安装erlang的帮助手册(不是默认安装的)。

19. 在erlang shell中输入命令help().会看到内建的命令,这些命令的定义在模块shell_default中。

20. 可以定义一个user_default模块,编译后放到加载目录中。这样在erlang shell中可以直接调用其中的函数,不用写模块名。

21. 如果erlang崩溃了,它会留下一个叫做erl_crash.dump的文件。erlang有一个基于web的崩溃分析器。在erlang shell中启动webtool:start().就启动了。

《Erlang程序设计》学习笔记-第1章 编译并运行程序的更多相关文章

  1. Android开发学习笔记(二)——编译和运行原理(1)

    http://www.cnblogs.com/Pickuper/archive/2011/06/14/2078969.html 接着上一篇的内容,继续从全局了解Android.在清楚了Android的 ...

  2. JavaScript高级程序设计学习笔记第三章--基本概念

    一.标识符: 1.区分大小写 2.命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($) 其他字符可以是字母.下划线.美元符号或数字 标识符中的字母也可以包含扩展的 ASCII 或 U ...

  3. JavaScript高级程序设计学习笔记第十三章--事件

    事件冒泡: IE 的事件流,事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).例如: <!DOCTYPE html> <htm ...

  4. JavaScript高级程序设计学习笔记第十一章--DOM扩展

    1.对 DOM 的两个主要的扩展是 Selectors API(选择符 API)和 HTML5 2.Selectors API Level 1 的核心是两个方法: querySelector()和 q ...

  5. JavaScript高级程序设计学习笔记第六章--面向对象程序设计

    1.ECMAScript没有类的概念,ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”,有点类似于散列表 2.ECMAScript 中有两种属性:数据属性和访问 ...

  6. JavaScript高级程序设计学习笔记第五章--引用类型(函数部分)

    四.Function类型: 1.函数定义的方法: 函数声明:function sum (num1, num2) {return num1 + num2;} 函数表达式:var sum = functi ...

  7. JavaScript高级程序设计学习笔记第五章--引用类型

    一.object类型 1.创建object类型的两种方式: 第一种,使用构造函数 var person = new Object();或者是var person={};/与new Object()等价 ...

  8. JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题

    1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在 ...

  9. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

随机推荐

  1. 15.lambda表达式

    #include <iostream> #include <array> using namespace std; //解决函数怀孕现象 //[](){} //[] =引用,只 ...

  2. 如何把excel同一个单元格内的文字和数字分别提取出来?

    平台:excel 2010 目的:把excel同一个单元格内的文字和数字分别提取出来 操作: 假设数据在A1单元格:如果文字在前,B1=left(A1,lenb(A1)-len(A1))可得文字,C1 ...

  3. COGS——C 908. 校园网 || 洛谷——P 2746 [USACO5.3]校园网Network of Schools

    http://www.cogs.pro/cogs/problem/problem.php?pid=908   ||  https://www.luogu.org/problem/show?pid=27 ...

  4. Android 自己定义主菜单

    本文介绍一个超简单的自己定义主菜单.效果例如以下: 原理:事实上就是对原生的Dialog的一个简单的封装.并加上显示和隐藏的动画效果.再给控件加上回调事件. TestDialog.java publi ...

  5. c++11 多线程 -- 基本使用

    c++11 多线程 – 基本使用 前言:这篇文章仅针对没有使用过c++11线程库的童鞋来高速入门,也是自己的一个简单记录,内容比較基础. 1.线程的基本使用 2.相互排斥量 3.条件变量 4.原子变量 ...

  6. SpringBoot日志logback-spring.xml分环境(转)

    springboot按照profile进行打印日志 log4j logback slf4j区别? 首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样 ...

  7. AOP技术应用和研究--OOP

    1,软件编程技术的发展 软件编程技术与程序设计语言是分不开的.过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,再到面向对象语言.每一种新的程序设计语言的出现 ...

  8. arm-linux-gcc: Command not found

    老是提示arm-linux-gcc找不到,但是确实是装好了,其实是权限的问题,Ubuntu没有root权限,刚开始用碰到很多麻烦,查了好多资料,终于把arm-linux-gcc: Command no ...

  9. spring项目启动后,获取bean的方法总结

    如果在web项目中,用到定时器的朋友可能会遇到使用spring注解的方式获取bean的时候报空指针的异常.这是就可以使用手工的方法获取spring容器中的bean了. 下面是具体的方法: 1.先说一个 ...

  10. [TypeStyle] Generate static css + html files using TypeStyle

    You can easily use TypeStyle to build static html files with encapsulated CSS. You can use this patt ...