getsubopt

Autres langues

Langue: ja

Version: 2007-05-05 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

getsubopt - ʸ»úÎóÃæ¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó°ú¤­¿ô¤Î²ò¼á¤ò¹Ô¤¦

½ñ¼°

#define _XOPEN_SOURCE 500
#include <stdlib.h>

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

ÀâÌÀ

getsubopt() ¤Ï¡¢ optionp ¤ÇÍ¿¤¨¤é¤ì¤¿¥«¥ó¥Þ¶èÀÚ¤ê¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¡¦¥ê¥¹¥È¤ò²òÀϤ¹¤ë¡£ (¤³¤Î¤è¤¦¤Ê¥µ¥Ö¥ª¥×¥·¥ç¥ó¡¦¥ê¥¹¥È¤Ï getopt(3) ¤ò»È¤Ã¤Æ¥³¥Þ¥ó¥É¥é¥¤¥ó¤ò²ò¼á¤·¤¿¾ì¹ç¤Ë¸½¤ì¤ë¤³¤È¤¬Â¿¤¤¡£ Î㤨¤Ð¡¢ mount(8) ¤Î -o ¥ª¥×¥·¥ç¥ó¤ò¸«¤ë¤È¤è¤¤¡£) ¤½¤ì¤¾¤ì¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Ë¤ÏÂбþ¤¹¤ëÃͤò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ ¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Î̾Á°¤ÈÂбþ¤¹¤ëÃͤÏÅù¹æ ('=') ¤Ç¶èÀÚ¤é¤ì¤ë¡£ Î㤨¤Ð¡¢°Ê²¼¤Î¤è¤¦¤Êʸ»úÎó¤ò optionp ¤ËÅϤ¹¤³¤È¤¬¤Ç¤­¤ë¡£
ro,name=xyz

tokens °ú¤­¿ô¤Ï¥È¡¼¥¯¥ó¤Î¥ê¥¹¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¡¢¥ê¥¹¥È¤Ï NULL ¤Ç½ªÃ¼¤µ¤ì¤ë¡£ getsubopt() ¤Ï¤³¤Î¥È¡¼¥¯¥ó¤ò optionp Æâ¤Çõ¤¹¡£ ¤½¤ì¤¾¤ì¤Î¥È¡¼¥¯¥ó¤Ï¡¢NULL ½ªÃ¼¤µ¤ì¤¿ 1ʸ»ú°Ê¾å¤Îʸ»úÎó¤Ç¡¢ ¾¤Î¥È¡¼¥¯¥ó¤È¶èÊ̤Ǥ­¤ëɬÍפ¬¤¢¤ë¡£ ¤Þ¤¿¡¢Åù¹æ¤È¥«¥ó¥Þ¤ò´Þ¤ó¤Ç¤Ï¤Ê¤é¤Ê¤¤¡£

getsubopt() ¤Ï¸Æ¤Ó½Ð¤µ¤ì¤ë¤¿¤Ó¤Ë¡¢ optionp Ãæ¤Î¼¡¤Î̤½èÍý¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Î¾ðÊó¤òÊÖ¤¹¡£ ¥µ¥Ö¥ª¥×¥·¥ç¥óÆâ¤ËÅù¹æ¤¬¤¢¤Ã¤¿¾ì¹ç¡¢ºÇ½é¤ÎÅù¹æ¤Ï ¤½¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Î̾Á°¤ÈÃͤζèÀÚ¤ê¤È²ò¼á¤µ¤ì¤ë¡£ ¶èÀڤ꤫¤é¼¡¤Î¥«¥ó¥Þ (ºÇ¸å¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Î¾ì¹ç¡¢Ê¸»úÎó¤ÎËöÈø) ¤Þ¤Ç¤¬¡¢¥µ¥Ö¥ª¥×¥·¥ç¥ó¤ÎÃͤȤʤ롣 ¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Î̾Á°¤¬ tokens Æâ¤Î̾Á°¤È°ìÃפ·¡¢Ãͤòɽ¤¹Ê¸»úÎ󤬸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¢ getsubopt() ¤Ï *valuep ¤òÃͤòɽ¤¹Ê¸»úÎó¤Î¥¢¥É¥ì¥¹¤ËÀßÄꤹ¤ë¡£ optionp Ãæ¤ÎºÇ½é¤Î¥«¥ó¥Þ¤Ï¥Ì¥ë¥Ð¥¤¥È¤Ç¾å½ñ¤­¤µ¤ì¤ë¡£¤½¤Î¤¿¤á¡¢ *valuep ¤Ï¤½¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Î¡ÖÃͤÎʸ»úÎó¡×¤½¤Î¤â¤Î¤È¤Ê¤ë¡£

¥µ¥Ö¥ª¥×¥·¥ç¥ó¤¬Ç§¼±¤µ¤ì¤¿¤¬¡¢Ãͤòɽ¤¹Ê¸»úÎ󤬸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡¢ *valuep ¤Ï NULL ¤ËÀßÄꤵ¤ì¤ë¡£

getsubopt() ¤¬ÊÖ¤ë»þ¡¢ optionp ¤Ï¼¡¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤ò»Ø¤·¤Æ¤¤¤ë¡£ ¤Á¤ç¤¦¤ÉºÇ¸å¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤¬½èÍý¤µ¤ì¤¿¾ì¹ç¤Ï¡¢ ʸ»úÎóËöÈø¤Î¥Ì¥ëʸ»ú¤ò»Ø¤·¤Æ¤¤¤ë¡£

ÊÖ¤êÃÍ

optionp Æâ¤Ç¥µ¥Ö¥ª¥×¥·¥ç¥ó¤¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¢ getsubopt() ¤ÏºÇ½é¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ë tokens ¤ÎÍ×ÁǤÎź»ú¤òÊÖ¤¹¡£ ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡¢-1 ¤òÊÖ¤¹¡£¤³¤Î¾ì¹ç¡¢ *valuep ¤Ï name[=value] ¤Îʸ»úÎóÁ´ÂΤȤʤ롣

*optionp ¤ÏÊѹ¹¤µ¤ì¤ë¤Î¤Ç¡¢ getsubopt() ¤ò¸Æ¤Ó½Ð¤¹Á°¤ÎºÇ½é¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Ï getsubopt() ¤ò¸Æ¤Ó½Ð¤·¸å¤Î¥µ¥Ö¥ª¥×¥·¥ç¥ó¤Èɬ¤º¤·¤âƱ¤¸¤È¤Ï¸Â¤é¤Ê¤¤¡£

½àµò

POSIX.1-2001.

Ãí°Õ

getsubopt() ¤Ï¡¢Ê¸»úÎó *optionp Ãæ¤Ë¸«¤Ä¤±¤¿¥«¥ó¥Þ¤ò¾å½ñ¤­¤¹¤ë¤Î¤Ç¡¢Ê¸»úÎó *optionp ¤Ï½ñ¤­¹þ¤ß²Äǽ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢ ʸ»úÎóÄê¿ô¤Ë¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£

Îã

°Ê²¼¤Î¥×¥í¥°¥é¥à¤Ï "-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);

    }



    /* Remainder of program... */



    exit(EXIT_SUCCESS);

}

´ØÏ¢¹àÌÜ

getopt(3), feature_test_macros(7)