getsubopt(3) - wariua/manpages-ko GitHub Wiki

NAME

getsubopt - ๋ฌธ์ž์—ด์—์„œ ํ•˜์œ„ ์˜ต์…˜ ์ธ์ž ํŒŒ์‹ฑ

SYNOPSIS

#include <stdlib.h>

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

glibc ๊ธฐ๋Šฅ ํ™•์ธ ๋งคํฌ๋กœ ์š”๊ฑด (feature_test_macros(7) ์ฐธ๊ณ ):

getsubopt():
_XOPEN_SOURCE >= 500
|| /* glibc 2.12๋ถ€ํ„ฐ: */ _POSIX_C_SOURCE >= 200809L

DESCRIPTION

getsubopt()๋Š” optionp๋กœ ๋ฐ›์€ ์‰ผํ‘œ ๊ตฌ๋ถ„ ํ•˜์œ„ ์˜ต์…˜ ๋ชฉ๋ก์„ ํŒŒ์‹ฑ ํ•œ๋‹ค. (๋ณดํ†ต getopt(3)๋ฅผ ์จ์„œ ๋ช…๋ นํ–‰์„ ํŒŒ์‹ฑ ํ•  ๋•Œ ๊ทธ๋Ÿฐ ํ•˜์œ„ ์˜ต์…˜ ๋ชฉ๋ก์ด ์ƒ๊ธด๋‹ค. ๊ฐ€๋ น mount(8)์˜ -o ์˜ต์…˜ ์ฐธ๊ณ .) ๊ฐ ํ•˜์œ„ ์˜ต์…˜์— ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ๊ทธ ๊ฒฝ์šฐ ๋“ฑํ˜ธ๋ฅผ ์จ์„œ ํ•˜์œ„ ์˜ต์…˜ ์ด๋ฆ„๊ณผ ๊ตฌ๋ณ„ํ•œ๋‹ค. ๋‹ค์Œ์€ optionp๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์„ ์ข…๋ฅ˜์˜ ๋ฌธ์ž์—ด ์˜ˆ์‹œ์ด๋‹ค.

ro,name=xyz

tokens ์ธ์ž๋Š” ํ† ํฐ๋“ค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋“ค๋กœ ๋œ NULL ์ข…๋ฃŒ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ด๋‹ค. getsubopt()๊ฐ€ optionp์—์„œ ๊ทธ ํ† ํฐ๋“ค์„ ์ฐพ๊ฒŒ ๋œ๋‹ค. ํ† ํฐ์€ ์ ์–ด๋„ ํ•œ ๋ฌธ์ž๋ฅผ ๋‹ด์€ ์„œ๋กœ ๊ตฌ๋ณ„๋˜๋Š” ๋„ ์ข…๋ฃŒ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•˜๋ฉฐ ๋“ฑํ˜ธ๋‚˜ ์‰ผํ‘œ๊ฐ€ ๋“ค์–ด ์žˆ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

๊ฐ getsubopt() ํ˜ธ์ถœ์€ ๋‹ค์Œ ๋ฏธ์ฒ˜๋ฆฌ ํ•˜์œ„ ์˜ต์…˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ optionp์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์„œ๋ธŒ ์˜ต์…˜์˜ ์ฒซ ๋ฒˆ์งธ ๋“ฑํ˜ธ๋Š” (์žˆ๋‹ค๋ฉด) ๊ทธ ํ•˜์œ„ ์˜ต์…˜์˜ ์ด๋ฆ„๊ณผ ๊ฐ’ ์‚ฌ์ด ๊ตฌ๋ถ„์ž๋กœ ํ•ด์„ํ•œ๋‹ค. ๊ฐ’์€ ๋‹ค์Œ ์‰ฝํ‘œ๊นŒ์ง€ ๋˜๋Š” (๋งˆ์ง€๋ง‰ ํ•˜์œ„ ์˜ต์…˜์ธ ๊ฒฝ์šฐ) ๋ฌธ์ž์—ด ๋๊นŒ์ง€ ์ด์–ด์ง„๋‹ค. ํ•˜์œ„ ์˜ต์…˜์˜ ์ด๋ฆ„์ด tokens์— ์žˆ๋Š” ์–ด๋–ค ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๊ณ  ๊ฐ’ ๋ฌธ์ž์—ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— getsubopt()๋Š” ๊ทธ ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๋ฅผ *valuep์— ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  optionp์˜ ์ฒซ ๋ฒˆ์งธ ์‰ผํ‘œ๋ฅผ ๋„ ๋ฐ”์ดํŠธ๋กœ ๋ฎ์–ด ์จ์„œ *valuep๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๊ทธ ํ•˜์œ„ ์˜ต์…˜์˜ "๊ฐ’ ๋ฌธ์ž์—ด"์ด ๋œ๋‹ค.

ํ•˜์œ„ ์˜ต์…˜์„ ์ธ์‹ํ–ˆ์ง€๋งŒ ๊ฐ’ ๋ฌธ์ž์—ด์€ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์—๋Š” *valuep๋ฅผ NULL๋กœ ์„ค์ •ํ•œ๋‹ค.

getsubopt() ๋ฐ˜ํ™˜ ์‹œ optionp๋Š” ๋‹ค์Œ ํ•˜์œ„ ์˜ต์…˜์„ ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜, ๋งˆ์ง€๋ง‰ ํ•˜์œ„ ์˜ต์…˜์„ ๋ฐฉ๊ธˆ ์ฒ˜๋ฆฌํ•œ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด ๋์— ์žˆ๋Š” ๋„ ๋ฐ”์ดํŠธ('\0')๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

RETURN VALUE

optionp์˜ ์ฒซ ๋ฒˆ์งธ ํ•˜์œ„ ์˜ต์…˜์„ ์ธ์‹ํ•œ ๊ฒฝ์šฐ getsubopt()๋Š” tokens์—์„œ ์ผ์น˜ํ•˜๋Š” ํ•˜์œ„ ์˜ต์…˜ ํ•ญ๋ชฉ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์•„๋‹ˆ๋ผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ *valuep๋Š” name[=value] ๋ฌธ์ž์—ด ์ „์ฒด์ด๋‹ค.

*optionp๊ฐ€ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— getsubopt() ํ˜ธ์ถœ ์ „์˜ ์ฒซ ๋ฒˆ์งธ ํ•˜์œ„ ์˜ต์…˜์€ getsubopt() ํ›„์˜ ์ฒซ ๋ฒˆ์งธ ํ•˜์œ„ ์˜ต์…˜๊ณผ (๋ฐ˜๋“œ์‹œ) ๊ฐ™์ง€ ์•Š๋‹ค.

ATTRIBUTES

์ด ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ attributes(7)๋ฅผ ๋ณด๋ผ.

์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๊ฐ’
getsubopt() ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Safe

CONFORMING TO

POSIX.1-2001, POSIX.1-2008.

NOTES

๋ฌธ์ž์—ด *optionp์—์„œ ์ฐพ์€ ์‰ผํ‘œ๋ฅผ getsubopt()์—์„œ ๋ฎ์–ด ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ฌธ์ž์—ด์ด ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์ผ ์ˆ˜ ์—†๋‹ค.

EXAMPLE

๋‹ค์Œ ํ”„๋กœ๊ทธ๋žจ์€ "-o" ์˜ต์…˜ ๋‹ค์Œ์˜ ํ•˜์œ„ ์˜ต์…˜์„ ๋ฐ›๋Š”๋‹ค.

#define _XOPEN_SOURCE 500
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

int
main(int argc, char **argv)
{
    enum {
        RO_OPT = 0,
        RW_OPT,
        NAME_OPT
    };
    char *const token[] = {
        [RO_OPT]   = "ro",
        [RW_OPT]   = "rw",
        [NAME_OPT] = "name",
        NULL
    };
    char *subopts;
    char *value;
    int opt;

    int readonly = 0;
    int readwrite = 0;
    char *name = NULL;
    int errfnd = 0;

    while ((opt = getopt(argc, argv, "o:")) != -1) {
        switch (opt) {
        case 'o':
            subopts = optarg;
            while (*subopts != '\0' && !errfnd) {

            switch (getsubopt(&subopts, token, &value)) {
            case RO_OPT:
                readonly = 1;
                break;

            case RW_OPT:
                readwrite = 1;
                break;

            case NAME_OPT:
                if (value == NULL) {
                    fprintf(stderr, "Missing value for "
                            "suboption '%s'\n", token[NAME_OPT]);
                    errfnd = 1;
                    continue;
                }

                name = value;
                break;

            default:
                fprintf(stderr, "No match found "
                        "for token: /%s/\n", value);
                errfnd = 1;
                break;
            }
        }
        if (readwrite && readonly) {
            fprintf(stderr, "Only one of '%s' and '%s' can be "
                    "specified\n", token[RO_OPT], token[RW_OPT]);
            errfnd = 1;
        }
        break;

        default:
            errfnd = 1;
        }
    }

    if (errfnd || argc == 1) {
        fprintf(stderr, "\nUsage: %s -o <suboptstring>\n", argv[0]);
        fprintf(stderr, "suboptions are 'ro', 'rw', "
                "and 'name=<value>'\n");
        exit(EXIT_FAILURE);
    }

    /* ํ”„๋กœ๊ทธ๋žจ ๋‚˜๋จธ์ง€... */

    exit(EXIT_SUCCESS);
}

SEE ALSO

getopt(3)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ