C初心者がmemcached-1.4.5を追いかける。(23)
C初心者がmemcached-1.4.5を追いかける。(22)の続き
ソースはコチラにてDLしました。
getoptで受け取ったパラメータによって処理を行っている部分を追いかける。
memcached.c(4403行目あたり)
case 'D': if (! optarg || ! optarg[0]) { fprintf(stderr, "No delimiter specified\n"); return 1; } settings.prefix_delimiter = optarg[0]; settings.detail_enabled = 1; break;
"D:" /* prefix delimiter? */
optargでifしている。optargをチェック。
404 - エラー: 404
現在の argv 要素にテキストがあれば (つまり、"-oarg" のように、オプション名自身と同じワード内に テキストがある場合)、それが optarg に返される。 なければ optarg は 0 に設定される。
上記の意味でifでは以下のことを行っている?
- Dオプションの引数に何も設定していない場合エラーとする
- Dオプションの引数に0から始まる文字列を設定した場合エラーとする
このへんは動かしてみないと机上の空論になりそう。:TODOってことにしよう。
settings.prefix_delimiterに引数の値(1文字目)を設定
settings.detail_enabledに1を設定
struct settings { settings.prefix_delimiter = ':'; settings.detail_enabled = 0;
static void settings_init(void) { char prefix_delimiter; /* character that marks a key prefix (for stats) */ int detail_enabled; /* nonzero if we're collecting detailed stats */
初期処理では、settings.prefix_delimiter に':'、
settings.detail_enabledに0を設定している。