GETSUBOPT(3) FreeBSD ライブラリ関数マニュアル GETSUBOPT(3)
名称
getsubopt − 引数からサブオプションを取得 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <unistd.h> extern char *suboptarg; int |
getsubopt(char **optionp, char * const *tokens, char **valuep); |
解説 |
getsubopt() 関数は、 1 つまたは複数のタブ、スペースまたはコンマ (‘,’) キャラクタによって区切られたトークンが含まれる文字列を解析します。ユー ティリティのコマンドラインの一部として入力される、オプション引数のまとま りを解析するのに使用するのが目的です。 引数 optionp は、文字列へのポインタを指すポインタです。引数 tokens は、文 字列へのポインタを持つ、 NULL で終わる配列を指すポインタです。 getsubopt() 関数は、文字列の最初のトークンに適合する文字列を参照する tokens 配列中のポインタの、0 始まりのオフセットを返します。文字列にトーク ンが一切含まれない、または tokens 中に適合する文字列が含まれない場合には −1 を返します。 トークンの形式が ‘‘name=value’’ である場合、 valuep で参照される先は、 トークンの ‘‘value’’ の部分の先頭を指すように設定されます。 getsubopt() から戻った時、 optionp が文字列の次のトークンの先頭を指すよう に設定されます。または、それ以上のトークンがない場合には、文字列の終わり の null を指します。外部変数 suboptarg は、現在のトークンの先頭を指すよう に設定されます。トークンがなかった場合は、 NULL となります。引数 valuep は、トークンの ‘‘value’’ の部分を示すように設定されます。また は、‘‘value’’ 部分がなかった場合は NULL となります。 |
使用例
char *tokens[] = { |
#define ONE |
0 |
|||
"one", |
||||
#define TWO |
1 |
|||
"two", |
||||
NULL |
}; ... extern char *optarg, *suboptarg; while ((ch = getopt(argc, argv, "ab:")) != -1) { |
switch(ch) { |
|||||||
case ’a’: |
|||||||
/* ‘‘a’’ オプションを処理 */ |
|||||||
break; |
|||||||
case ’b’: |
|||||||
option = optarg; |
|||||||
while (*option) { |
|||||||
switch(getsubopt(&option, tokens, &value)) { |
|||||||
case ONE: |
|||||||
/* ‘‘one’’ サブオプションを処理 */ |
|||||||
break; |
|||||||
case TWO: |
|||||||
/* ‘‘two’’ サブオプションを処理 */ |
|||||||
if (!value) |
|||||||
error("no value for two"); |
|||||||
i = atoi(value); |
|||||||
break; |
|||||||
case −1: |
|||||||
if (suboptarg) |
|||||||
error("illegal sub option %s", |
|||||||
suboptarg); |
|||||||
else |
|||||||
error("missing sub option"); |
|||||||
break; |
|||||||
} |
|||||||
break; |
|||||||
} |
関連項目
歴史
getsubopt() 関数は 4.4BSD ではじめて登場しました。 FreeBSD 10.0 June 9, 1993 FreeBSD 10.0 |