C初心者がmemcached-1.4.5を追いかける。(4)
C初心者がmemcached-1.4.5を追いかける。(3)の続き
ソースはコチラにてDLしました。
memcached.c(4296行目あたり)
/* process arguments */ /* 引数プロセス */ while (-1 != (c = getopt(argc, argv, "a:" /* access mask for unix socket */ "p:" /* TCP port number to listen on */ "s:" /* unix socket path to listen on */ "U:" /* UDP port number to listen on */ "m:" /* max memory to use for items in megabytes */ "M" /* return error on memory exhausted */ "c:" /* max simultaneous connections */ "k" /* lock down all paged memory */ "hi" /* help, licence info */ "r" /* maximize core file limit */ "v" /* verbose */ "d" /* daemon mode */ "l:" /* interface to listen on */ "u:" /* user identity to run as */ "P:" /* save PID in file */ "f:" /* factor? */ "n:" /* minimum space allocated for key+value+flags */ "t:" /* threads */ "D:" /* prefix delimiter? */ "L" /* Large memory pages */ "R:" /* max requests per event */ "C" /* Disable use of CAS */ "b:" /* backlog queue limit */ "B:" /* Binding protocol */ "I:" /* Max item size */ "S" /* Sasl ON */ ))) { switch (c) { case 'a': /* access for unix domain socket, as octal mask (like chmod)*/ /* strtol :文字列をlong値に変換*/ settings.access= strtol(optarg,NULL,8); break;
getopt(3)を使用してオプションの設定をしている所。
Googleのソースコード検索で"while (-1 != (c = getopt(argc, argv,"を検索
ここでは↓のやり方
while ((result = getopt(argc, argv, "abcd:e:")) != -1) { switch (result) { case '.....': } }
memcashed.cでは
while (-1 != (c = getopt(argc, argv, "a:" /* access mask for unix socket */ "p:" /* TCP port number to listen on */ ))) { switch (c) { case '.....': } }
ふつうのLinuxプログラミングだと
while ((opt = getopt(argc, argv, "af:tx")) != -1) { switch (opt) { case '.....': } }
・・・・凄い気になった所で、
"a:" "p:"は文字列が並んでいるだけだ。
JavaやVB、Ruby等のスクリプト言語とかだとエラーとなるはず。でもmemcashed.cのソースではやってのけている。
Googleのソースコード検索で"while (-1 != (c = getopt(argc, argv,"を検索した結果を見ると、"abcd:e:"なふうな記述もあって拡張したCなのか?!
と頭を悩ませて、会社の先輩に尋ねてみると。Yahoo!¥¸¥ª¥·¥Æ¥£¡¼¥ºを教えて頂きました。
○文字列定数の連結
次のように文字列定数をつなげて書くと、コンパイル時に連結されて1つの文字列定数として扱われます。s = "abcde""fghij";
非常に長い文字列定数を扱いたいときには、2行に分けて書くこともできます。s = "abcdefghijklmn"
"opqrstuvwxyz";
C言語では、ソース上の改行は意味を持たないので、上のように書いても、2つの文字列定数は連結されて1つになります。
なるほど。そういえばPythonは文字列で複数行コメントを記述しているのを思い出した。
[Python] コメント - SumiTomohikoの日記