日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

erl的启动参数分析

發布時間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 erl的启动参数分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于erl的啟動參數主要分為emulator flags,?flags?and?plain arguments

emulator flags:以‘+’開頭的啟動參數,如+P, +W等用于控制模擬器的行為。

flags:以'-'開頭的啟動參數,如-sname, -boot等,這些需要被傳遞給ert中的init模塊進行解析處理。

plain arguments:沒有詳細的定義,基本就是除了以上emulator flags,和flags,其他的都屬于此類。用戶自定義的flag, 在init對arguments的解析過程中進行解析和存儲。

?

模擬器flag主要控制?emulator的行為或者配置,這部分直接查文檔即可得到相應解釋。

接下來,我們來查看一下init中關于上面關于flags和plain arguments的解析。

parse_boot_args(Args) ->parse_boot_args(Args, [], [], []).parse_boot_args([B|Bs], Ss, Fs, As) ->case check(B) ofstart_extra_arg ->{reverse(Ss),reverse(Fs),lists:reverse(As, Bs)}; % BIFstart_arg ->{S,Rest} = get_args(Bs, []),parse_boot_args(Rest, [{s, S}|Ss], Fs, As);start_arg2 ->{S,Rest} = get_args(Bs, []),parse_boot_args(Rest, [{run, S}|Ss], Fs, As);eval_arg ->{Expr,Rest} = get_args(Bs, []),parse_boot_args(Rest, [{eval, Expr}|Ss], Fs, As);flag ->{F,Rest} = get_args(Bs, []),Fl = case F of[] -> [B];FF -> [B,FF]end,parse_boot_args(Rest, Ss, [list_to_tuple(Fl)|Fs], As);arg ->parse_boot_args(Bs, Ss, Fs, [B|As]);end_args ->parse_boot_args(Bs, Ss, Fs, As)end; parse_boot_args([], Start, Flags, Args) ->{reverse(Start),reverse(Flags),reverse(Args)}.

check(<<"-extra">>) -> start_extra_arg;
check(<<"-s">>) -> start_arg;
check(<<"-run">>) -> start_arg2;
check(<<"-eval">>) -> eval_arg;
check(<<"--">>) -> end_args;
check(X) when is_binary(X) ->
case binary_to_list(X) of
[$-|_Rest] -> flag;
_Chars -> arg %Even empty atoms
end;
check(_X) -> arg. %This should never occur

get_args([B|Bs], As) ->
case check(B) of
start_extra_arg -> {reverse(As), [B|Bs]};
start_arg -> {reverse(As), [B|Bs]};
start_arg2 -> {reverse(As), [B|Bs]};
eval_arg -> {reverse(As), [B|Bs]};
end_args -> {reverse(As), Bs};
flag -> {reverse(As), [B|Bs]};
arg ->
get_args(Bs, [B|As])
end;
get_args([], As) -> {reverse(As),[]}.

使用init:get_arguments/0, init:get_argument/1獲取flags

使用init:get_plain_arguments/0獲取plain arguments。

?

關于plain arguments我們可以有三種方式在啟動時輸入。

1. 在所有flag的開頭

如:erl xx yy -sname xx

plain arguments 為["xx", "yy"].

arguments中sname值為[["xx"]].

?

2.但有的時候我們需要在想在中間或者接著其他flags插入plain arguments時候,這時候我們需要用 -- ?來分隔

如:erl -sname xx xx?

這樣使用init:get_argument(sname)時,

獲得sname值為[["xx", xx"]], init:get_plain_arguments() 則為[]

但如果這樣erl -sname xx --x

則獲得sname值為[["xx"]],

plain arguments為["xx"].

?

3. 最后,我們可以-extra之后輸入, 這之后的所有參數全部歸為plain arguments中,

如:erl -extra yy -sname xx

plain arguments為["yy", "-sname", "xx"]

?

?

轉載于:https://www.cnblogs.com/star-star/archive/2012/12/26/2834194.html

總結

以上是生活随笔為你收集整理的erl的启动参数分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。