スポンサーリンク

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;
char *option, *value;

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;

}

関連項目

getopt(3), strsep(3)

歴史

getsubopt() 関数は 4.4BSD ではじめて登場しました。

FreeBSD 10.0 June 9, 1993 FreeBSD 10.0

スポンサーリンク