EN JA
GETSUBOPT(3)
GETSUBOPT(3) FreeBSD Library Functions Manual GETSUBOPT(3)

名称

getsubopt引数からサブオプションを取得する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < stdlib.h>

extern char *suboptarg;

int
getsubopt( char **optionp, char * const *tokens, char **valuep);

解説

getsubopt() 関数は、1 つ以上のタブ、空白またはコンマ (‘ ,’) 文字によって区切られるトークンを含んでいる文字列を解析します。それは、ユーティリティのコマンド行の一部として提供されるオプション引数の集まりを解析するために使用することを目的としています。

引数 optionp は、文字列へのポインタへのポインタです。引数 tokens は、文字列へのポインタの NULL-terminated で終了する配列へのポインタです。

getsubopt() 関数は、文字列の最初のトークンに一致する文字列を参照する tokens 配列のポインタの 0 をベースにしたオフセットを返し、文字列がトークンを含まないか、または tokens が一致する文字列を含まないなら、-1 を返します。

トークンが形式 ``name=value'' であるなら、 valuep によって参照される位置は、トークンの ``value'' 部分の始めを指すように設定されます。

getsubopt() からの返ったとき、 optionp は、文字列の次のトークンの始めを指すように設定され、これ以上のトークンが存在しないなら、文字列の終りのヌル文字に設定されます。外部変数 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 ではじめて登場しました。
December 25, 2011 FreeBSD