======================================== virshのソースコードを読んだ時のメモ ======================================== virshはlihbvirt内の https://github.com/libvirt/libvirt/tree/c6c23415706ee303a9fbeee5326a4e504645fe3e/tools にあるのでそこをみていく. とりあえずvirsh.cの一番下を見ると,mainがあるので動作の発端が見える. 初期化周りが見えるが,consoleのescapekeyがハードコードしてあったりして笑う. l. 489 :: virshCtl.escapeChar = "^]"; /* Same default as telnet */ こんな大きなコードでも愚直にprognameを出してるもんなんだなあと思う. l.852 :: if (!(progname = strrchr(argv[0], '/'))) progname = argv[0]; else progname++; ctl->progname = progname; コマンド実行させてそうな関数呼び出しvshCommandRunが見つかる. ついでにinteractive modeとの場合分け部分も見つかる. コマンドを読み解くにはctl(vshControlなる構造体)が重要そう. ちょっと上にあるvirshParseArgvで引数を解釈して構造体を作り上げてよしなにしている感じがある. l.885 :: if (!virshParseArgv(ctl, argc, argv) || !virshInit(ctl)) { virshDeinit(ctl); exit(EXIT_FAILURE); } if (!ctl->connname) ctl->connname = g_strdup(getenv("VIRSH_DEFAULT_CONNECT_URI")); if (!ctl->imode) { ret = vshCommandRun(ctl, ctl->cmd); } else { /* interactive mode */ vshCommandRunもしくはvirshParseArgvから続き書く.