Hatena::Grouperlang

檜山正幸のErlang未確認情報 RSSフィード

 | 

2009-03-16 (月)

コマンドライン引数の処理手順の目安

| 08:53

コマンドライン引数の挙動が変なので調べようとした。実際にはチャンと調べてないが、調べる順番だけは記しておく。

[追記]

(0) /erts/etc/common/erlexec.c

起動用のコマンドはエミュレータと別にある。

[/追記]

(1) /erts/emulator/sys/<OS名>/erl_main.c

/erts/emulator/sys/<OS名>/に下にあるerl_main.cを見る。ここにCのエントリーポイントがある。

int
main(int argc, char **argv)
{
    erl_start(argc, argv);
    return 0;
}

要するに、erl_start()に丸投げ。

(2) /erts/emulator/beam/erl_init.c

erl_init.c の erl_start(int argc, char **argv) を見る。すると、erl_start内で early_init(int *argc, char **argv) が呼ばれている。

(3) /erts/emulator/beam/erl_init.c

関数early_init()は、同じerl_init.c内にある。

static void
early_init(int *argc, char **argv)
{
/* ... */
}

(4) /erts/emulator/beam/erl_init.c

early_init()内で、

  1. erl_alloc.cの erts_alloc_init(argc, argv) が呼ばれる。
  2. sys/<OS名>/sys.cの erl_sys_args(argc, argv) が呼ばれる。

(5) /erts/emulator/beam/erl_alloc.c

erl_alloc.cのerts_alloc_init(int *argc, char **argv) から、同じファイル内の static void handle_args(int *argc, char **argv, init_t *init) が呼ばれる。

(6) /erts/emulator/sys/<OS名>/sys.c

sys.cのerl_sys_args(argc, argv) は大したことはしてないようだ。

(7) /erts/emulator/beam/erl_init.c

erl_start()に制御が戻ると、erl_start()内でも引数処理を行う。erl_start()の最後のほうで、

    boot_argc = argc - i;  /* Number of arguments to init */
    boot_argv = &argv[i];

    erl_first_process_otp("otp_ring0", NULL, 0, boot_argc, boot_argv);

erl_first_process_otp()からinitプロセスに残余の引数が渡る。ここから先はErlangパートの処理になる。

(8) lib/kernel/src/init.erl

kernelのinit.erlを読むとよい。Erlangで書かれたparse_boot_args(Args) 関数引数処理。

見るファイル:

  1. /erts/emulator/beam/erl_init.c
  2. /erts/emulator/sys/<OS名>/erl_main.c
  3. /erts/emulator/beam/erl_alloc.c
  4. /erts/emulator/sys/<OS名>/sys.c
  5. /lib/kernel/src/init.erl

ZulZul2012/12/25 22:46You are so awesome for helping me solve this myrsety.

ntcmludliintcmludlii2012/12/27 21:12cbBQgd , [url=http://avrysmvevqkf.com/]avrysmvevqkf[/url], [link=http://wxvfrxagnjtl.com/]wxvfrxagnjtl[/link], http://gpndvmacrriz.com/

kkpzbzykkpzbzy2012/12/28 04:26O4Y3qr <a href="http://vqbiadhaqhlr.com/">vqbiadhaqhlr</a>

itjozdohgaitjozdohga2012/12/29 05:17UPRdfv , [url=http://chdttolnllbf.com/]chdttolnllbf[/url], [link=http://scoaptdkhphc.com/]scoaptdkhphc[/link], http://qbwfrzhkgbwt.com/

 |