GETSUBOPT(3)

명칭
getsubopt - 인수로부터 서브 옵션을 취득

프로그램 라이브러리
libc

서식
<unistd.h> extern char *suboptarg; int getsubopt(char **optionp, char * const *tokens, char **valuep)

해설
getsubopt() 함수는, 1 개(살) 또는 복수의 탭, 스페이스 또는 콤마 (‘’), 캐릭터에 의해 단락지어진 토큰이 포함되는 캐릭터 라인을 해석합니다. 유틸리티의 명령행의 일부로서 입력되는, 옵션 인수의 정리를 해석하는데 사용하는 것이 목적입니다.

인수 optionp (은)는, 캐릭터 라인에의 포인터를 가리키는 포인터입니다. 인수 tokens (은)는, 캐릭터 라인에의 포인터를 가지는, NULL 그리고 끝나는 배열을 가리키는 포인터입니다.

getsubopt() 함수는, 캐릭터 라인의 최초의 토큰에 적합하는 캐릭터 라인을 참조한다 tokens 배열중의 포인터의, 0 시작의 오프셋(offset)를 돌려줍니다. 캐릭터 라인에 토큰이 일절 포함되지 않는, 또는 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 그리고 처음 등장했습니다.