- 論壇徽章:
- 0
|
1. erlang:halt()可以即刻停止系統(tǒng)運行。
2. q()命令可以完成文件和數(shù)據(jù)庫的一些處理后再退出。它是init:stop()的一個shell別名
3. erlang可以動態(tài)加載代碼,正在運行的代碼可以在重新編譯后動態(tài)加裁而不用停止程序的運行。
4. 模塊加載相關(guān)函數(shù):
code:get_path() %% 可以獲取當(dāng)前加載路徑的設(shè)定值。
code:all_loaded() %% 獲取所有已經(jīng)加載的模塊。
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相當(dāng)于add_patha,-pz相當(dāng)于add_pathz
6. 在erlang的home目錄下(或當(dāng)前目錄下)可以加一個.erlang文件,在這個文件中可以寫一些erlang代碼,erlang在啟動時首先執(zhí)行這里面的代碼。
一般情況一下可以將加載目錄的命令放到這個。
如果不清楚當(dāng)前系統(tǒng)下erlang的home目錄,可以用init:get_argument(home).來獲取。
當(dāng)前目錄下的.erlang文件比home目錄下的.erlang文件的優(yōu)先級要高。
7. 除了在shell中運行一個模塊外,還有以下的方法:
方法一:命令行下編譯運行
$ erlc hello.erl
$ erl -noshell -s hello start -s init stop
%% 可以加-pa/-pz命令選項在這個命令行中
%% 可以將這個命令行寫到一個shell腳本中(如bash腳本),這樣就可以直接執(zhí)行腳本平啟動erlang程序了。
%% 在windows下可以寫一個bat文件,將這個命令寫入。
方法二:將程序當(dāng)作escript腳本運行(不用編譯),只有erlang R11B-4以后的版本才支持escript,在windows下不行
#!/usr/bin/env escript
main(_) -> io:format("Hello world\n"). %% 這個函數(shù)需要是main,escript從這個函數(shù)開始
方法三:當(dāng)程序需要參數(shù)時,如何在命令行輸入?yún)?shù)。
-s選項后面是:ModName FuncName Args,其中Args是一個原子的參數(shù)列表。所以我們在程序中最好有一個處理命令行參數(shù)的函數(shù)。像這樣: main([A]) -> I = list_to_integer(atom_to_list(A)), ... %% 這里只接收一個參數(shù),如果需要兩個可以這樣main([A, B]) -> ...
escript與其它的腳本一樣,運行時直接將參數(shù)放到后面就可以了。
8. atom_to_list(Atom) -> string 可以獲取原子的字符串形式
9. list_to_integer(List) -> int 可以獲取一個字符串的整數(shù)形式
10. 快速腳本:用-eval在命令行上直接運行一個erlang表達式,這個方法沒什么大用途,我在windows測試好像沒有顯示什么內(nèi)容。
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 $ erlc -W $ 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的崩潰轉(zhuǎn)存文件
cd dir1; make clean
cd dir2; make clean
12. 一個精簡makefile
.SUFFIXES: .erl .beam
.erl.beam:
erlc -W $ ${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選項,系統(tǒng)會啟動一個監(jiān)視進程,如果發(fā)現(xiàn)erlang進程死亡,監(jiān)視進程就會執(zhí)行Cmd,通常Cmd會重啟Erlang系統(tǒng)。
16. 如果調(diào)用一個eralng函數(shù)時發(fā)生undef錯誤,可能是以下幾種原因:
(1)系統(tǒng)中不存在這個模塊或函數(shù),可能是拼寫錯誤。
(2)系統(tǒng)中有這個模塊,但沒有編譯。
(3)已經(jīng)編譯了,但它所在的目錄不在erlang的加載路徑中。
(4)加載了幾個不同版本,我們可以通過code:clash()函數(shù)來看一下是否有重名的模塊。
17. JCL(Job Control Language)模式:在erlang shell中按下Ctrl+G會進入JCL模式,可以輸入h尋求幫助。
18. man:在Unix系統(tǒng)的命令行中執(zhí)行:$ erl -man lists可以看到lists
19. 世界是并行的。
20. erlang程序模擬我們思考的反應(yīng)的模式。
21. 人就像是一個通過發(fā)送消息來進行交流的實體。
22. 如果有人死了,其他人會注意到。
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/16651/showart_1993332.html |
|