getopt

Autres langues

Langue: ja

Version: 2004-07-28 (openSuse - 09/10/07)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)

̾Á°

getopt, getopt_long, getopt_long_only - ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤ò²ò¼á¤¹¤ë

½ñ¼°


#include <unistd.h>



int getopt(int argc, char * const argv[],

           const char *optstring);



extern char *optarg;

extern int optind, opterr, optopt;



#define _GNU_SOURCE


#include <getopt.h> int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex); int getopt_long_only(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);

ÀâÌÀ

getopt() ´Ø¿ô¤Ï¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¤­¿ô¤ò²ò¼á¤¹¤ë¡£ getopt() ¤¬¤È¤ë°ú¤­¿ô argc ¤È argv ¤Ï¡¢¤½¤ì¤¾¤ì¥×¥í¥°¥é¥à¤Îµ¯Æ°»þ¤Ë main() ´Ø¿ô¤ËÅϤµ¤ì¤¿°ú¤­¿ô¤Î¸Ä¿ô¤ÈÇÛÎó¤Ç¤¢¤ë¡£ argv ¤ÎÍ×ÁǤΤ¦¤Á '-' ¤Ç»Ï¤Þ¤ë¤â¤Î (¤«¤Ä "-" ñÆȤä "--" ñÆȤǤϤʤ¤¤â¤Î) ¤Ï ¥ª¥×¥·¥ç¥óÍ×ÁÇ (option element) ¤È¤ß¤Ê¤µ¤ì¤ë¡£ ¤³¤ÎÍ×ÁǤ«¤éÀèƬ¤Î '-' ¤ò½ü¤¤¤¿Ê¸»ú¤Ï ¥ª¥×¥·¥ç¥óʸ»ú (option character) ¤È¤µ¤ì¤ë¡£ getopt() ¤Ï¡¢·«¤êÊÖ¤·¸Æ¤Ó½Ð¤µ¤ì¤ë¤´¤È¤Ë¡¢¼¡¤Î¥ª¥×¥·¥ç¥óʸ»ú¤òÊÖ¤¹¡£

¿·¤¿¤Ê¥ª¥×¥·¥ç¥óʸ»ú¤ò¸«¤Ä¤±¤ë¤È¡¢ getopt() ¤Ï¤½¤Îʸ»ú¤òÊÖ¤·¡¢ ³°ÉôÊÑ¿ô optind ¤È¥¹¥¿¥Æ¥£¥Ã¥¯¤ÊÊÑ¿ô nextchar ¤ò¹¹¿·¤¹¤ë¡£ ¤³¤ì¤é¤Ë¤è¤Ã¤Æ¡¢ getopt() ¤Ï¼¡²ó¤Î¸Æ¤Ó½Ð¤·¤ÎºÝ¤Ë¡¢ °Ê¹ß¤Î¥ª¥×¥·¥ç¥óʸ»ú¤ä argv Í×ÁǤΥ¹¥­¥ã¥ó¤ò·Ñ³¤Ç¤­¤ë¡£

¥ª¥×¥·¥ç¥óʸ»ú¤¬¤½¤ì°Ê¾å¸«¤Ä¤«¤é¤Ê¤¯¤Ê¤ë¤È¡¢ getopt() ¤Ï -1 ¤òÊÖ¤¹¡£¤½¤·¤Æ optind ¤Ï¡¢argv ¤ÎÍ×ÁǤΤ¦¤Á¡¢ ¥ª¥×¥·¥ç¥ó¤Ç¤Ê¤¤ºÇ½é¤ÎÍ×ÁǤò¼¨¤¹¤è¤¦¤Ë¤Ê¤ë¡£

optstring ¤Ï¼õ¤±ÉÕ¤±¤ë¥ª¥×¥·¥ç¥óʸ»ú¤«¤é¤Ê¤ëʸ»úÎó¤Ç¤¢¤ë¡£ ʸ»ú¤Î¤¢¤È¤Ë¥³¥í¥ó (:) ¤¬ÃÖ¤«¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢ ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¤­¿ô¤¬É¬ÍפǤ¢¤ë¤³¤È¤ò¼¨¤¹¡£ ¤³¤Î¤È¤­ getopt() ¤Ï¡¢¸½ºßÃíÌܤ·¤Æ¤¤¤ë argv Í×ÁǤǡ¢¥ª¥×¥·¥ç¥óʸ»ú¤Ë°ú¤­Â³¤¯¥Æ¥­¥¹¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤«¡¢ ¤¢¤ë¤¤¤Ï¼¡¤Î argv Í×ÁǤΥƥ­¥¹¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò optarg ¤ËÂåÆþ¤¹¤ë¡£ 2 ¸ÄϢ³¤·¤Æ¥³¥í¥ó¤¬ÃÖ¤«¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢ ¤½¤Î¥ª¥×¥·¥ç¥ó¤Ï°ú¤­¿ô¤ò¤È¤Ã¤Æ¤â¤È¤é¤Ê¤¯¤Æ¤â¤è¤¤¡£ ¸½ºß¤Î argv Í×ÁǤ˥ƥ­¥¹¥È¤¬¤¢¤ì¤Ð (¤Ä¤Þ¤ê¡¢"-oarg" ¤Î¤è¤¦¤Ë¡¢¥ª¥×¥·¥ç¥ó̾¼«¿È¤ÈƱ¤¸¥ï¡¼¥ÉÆâ¤Ë ¥Æ¥­¥¹¥È¤¬¤¢¤ë¾ì¹ç)¡¢¤½¤ì¤¬ optarg ¤ËÊÖ¤µ¤ì¤ë¡£ ¤Ê¤±¤ì¤Ð optarg ¤Ï 0 ¤ËÀßÄꤵ¤ì¤ë¡£ ¤³¤ì¤Ï GNU ¤Ë¤è¤ë³ÈÄ¥¤Ç¤¢¤ë¡£ optstring ¤Ë W ¤È¤½¤ì¤Ë³¤¯¥»¥ß¥³¥í¥ó¤¬Æþ¤Ã¤Æ¤¤¤ë¤È¡¢ -W foo ¤ÏŤ¤¥ª¥×¥·¥ç¥ó --foo ¤ÈƱ¤¸¤è¤¦¤Ë°·¤ï¤ì¤ë (POSIX.2 ¤Ï -W ¥ª¥×¥·¥ç¥ó¤ò¼ÂÁõ°Í¸¤Î³ÈÄ¥¤È¤·¤ÆͽÌ󤷤Ƥ¤¤ë)¡£ ¤³¤ÎÆ°ºî¤Ï GNU ¤Ë¤è¤ë³ÈÄ¥¤Ç¤¢¤ê¡¢GNU libc 2 °ÊÁ°¤Î¥é¥¤¥Ö¥é¥ê¤Ç¤Ï ÍøÍѤǤ­¤Ê¤¤¡£

¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï getopt() ¤Ï argv ¤ò¥¹¥­¥ã¥ó¤¹¤ëºÝ¤Ë½ç½ø¤òÊѹ¹¤·¡¢ ¥ª¥×¥·¥ç¥ó°Ê³°¤ÎÍ×ÁǤòºÇ¸å¤Ë°ÜÆ°¤¹¤ë¡£ ¾¤Ë¤â 2 ¤Ä¤Î¥â¡¼¥É¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£ optstring ¤ÎÀèƬʸ»ú¤¬ '+' ¤Ç¤¢¤ë¤«¡¢´Ä¶­ÊÑ¿ô POSIXLY_CORRECT ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¥ª¥×¥·¥ç¥ó¤òÂоݤȤ¹¤ëÆ°ºî¤Ï¡¢ È󥪥ץ·¥ç¥ó¤Î°ú¤­¿ô¤¬¸½¤ì¤¿Ãʳ¬¤Ç½ªÎ»¤¹¤ë¡£ optstring ¤ÎÀèƬʸ»ú¤¬ '-' ¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢ ¥ª¥×¥·¥ç¥ó¤Ç¤Ê¤¤ argv Í×ÁǤϡ¢ ʸ»ú¥³¡¼¥É 1 ¤Î¥ª¥×¥·¥ç¥ó¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë°·¤ï¤ì¤ë (¤³¤ì¤òÍѤ¤¤ë¥×¥í¥°¥é¥à¤Ï¡¢ ¥ª¥×¥·¥ç¥ó¤ä argv Í×ÁǤòǤ°Õ¤Î½ç½ø¤Ç¼õ¤±Æþ¤ì¡¢¤«¤Ä¤½¤ì¤é¤Î½ç½ø¤¬ °ÕÌ£¤ò»ý¤Ä¤è¤¦¤Ë½ñ¤«¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ë)¡£ "--" ¤ÏÆüì¤Ê°ú¤­¿ô¤Ç¡¢¥¹¥­¥ã¥ó¤Î¥â¡¼¥É¤Ë¤è¤é¤º¡¢ ¥ª¥×¥·¥ç¥ó¤Î¥¹¥­¥ã¥ó¤ò¶¯À©Åª¤Ë½ªÎ»¤µ¤»¤ë¡£

ǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥óʸ»ú¤¬¤¢¤ë¤È¡¢ getopt() ¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɸ½à½ÐÎϤËɽ¼¨¤·¡¢ ¤½¤Îʸ»ú¤ò optopt ¤ËÊݸ¤·¤Æ '?' ¤òÊÖ¤¹¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥°¥é¥à¤Ç opterr ¤ò 0 ¤Ë¤·¤Æ¤ª¤±¤Ð¡¢ ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨¤òÍÞÀ©¤Ç¤­¤ë¡£

getopt() ¤Ï argv ¤ÎÃæ¤Ë optstring ¤Ë¤Ê¤¤¥ª¥×¥·¥ç¥óʸ»ú¤ò¸«¤Ä¤±¤¿¾ì¹ç¡¢ ¤Þ¤¿¤Ï¥ª¥×¥·¥ç¥ó°ú¤­¿ô¤¬Â­¤ê¤Ê¤¤¤³¤È¤¬Ê¬¤«¤Ã¤¿¾ì¹ç¡¢ '?' ¤òÊÖ¤·¤Æ³°ÉôÊÑ¿ô optopt ¤ò¤½¤Î¥ª¥×¥·¥ç¥óʸ»ú¤ËÀßÄꤹ¤ë¡£ optstring ¤Î (¾å¤ÇÀâÌÀ¤·¤¿¥ª¥×¥·¥ç¥ó¤Ç»ØÄê¤Ç¤­¤ë '+' ¤Þ¤¿¤Ï '-' ¸å¤Ë³¤¯) ºÇ½é¤Îʸ»ú¤¬¥³¥í¥ó (':') ¤Î¤È¤­¡¢ getopt() ¤Ï¥ª¥×¥·¥ç¥ó°ú¤­¿ô¤¬Â­¤ê¤Ê¤¤¾ì¹ç¤Ë '?' ¤Ç¤Ï¤Ê¤¯ ':' ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤ò¸«¤Ä¤±¤¿¾ì¹ç¤Ç¡¢¤«¤Ä optstring ¤ÎºÇ½é¤Îʸ»ú¤¬¥³¥í¥ó¤Ç¤Ê¤¯¡¢ ¤«¤Ä³°ÉôÊÑ¿ô opterr ¤¬ 0 ¤Ç¤Ê¤¤¾ì¹ç (¤³¤ì¤¬¥Ç¥Õ¥©¥ë¥È)¡¢ getopt() ¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£

getopt_long() ´Ø¿ô¤Ï¡¢Ä¹¤¤¥ª¥×¥·¥ç¥ó (2 ¤Ä¤Î¥À¥Ã¥·¥å `--' ¤Ç»Ï¤Þ¤ë¥ª¥×¥·¥ç¥ó) ¤ò ¼õ¤±Æþ¤ì¤ë¤³¤È¤ò½ü¤¤¤Æ getopt() ¤ÈƱ¤¸¤è¤¦¤ËÆ°ºî¤¹¤ë (¥×¥í¥°¥é¥à¤ËŤ¤¥ª¥×¥·¥ç¥ó¤À¤±¤¬ÅϤµ¤ì¤¿¾ì¹ç¡¢ optstring ¤Ï NULL ¤Ç¤Ï¤Ê¤¯¶õʸ»úÎó ("") ¤È¤Ê¤ë)¡£ Ť¤¥ª¥×¥·¥ç¥ó¤Î̾Á°¤Ï¡¢Â¾¤È½Å¤Ê¤é¤Ê¤¤ÈϰϤˤª¤¤¤Æû½Ì¤Ç¤­¤ë¡£ ¤¢¤ë¤¤¤ÏÄêµÁ¤µ¤ì¤¿¥ª¥×¥·¥ç¥ó¤ËÀµ³Î¤Ë¥Þ¥Ã¥Á¤¹¤ë¤â¤Î¤Ç¤â (ÅöÁ³) ¤«¤Þ¤ï¤Ê¤¤¡£ Ť¤¥ª¥×¥·¥ç¥ó¤Ï°ú¤­¿ô¤ò¼è¤ë¤³¤È¤¬¤Ç¤­¡¢ --arg=param ¤Þ¤¿¤Ï --arg param ¤È¸À¤¦·Á¼°¤Ç»ØÄꤹ¤ë¡£

longopts ¤Ï struct option ¤ÎÍ×ÁǤ«¤é¤Ê¤ëÇÛÎó¤Î¡¢ÀèƬÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£ struct option ¤Ï <getopt.h> ¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£




struct option {

const char *name;

int has_arg;

int *flag;

int val;

};

¤½¤ì¤¾¤ì¤Î¥Õ¥£¡¼¥ë¥É¤Î°ÕÌ£¤Ï°Ê²¼¤ÎÄ̤ꡣ

name
Ť¤¥ª¥×¥·¥ç¥ó¤Î̾Á°¡£
has_arg
no_argument (¤Þ¤¿¤Ï 0) ¤Ê¤é¡¢¥ª¥×¥·¥ç¥ó¤Ï°ú¤­¿ô¤ò¤È¤é¤Ê¤¤¡£ required_argument (¤Þ¤¿¤Ï 1) ¤Ê¤é¡¢¥ª¥×¥·¥ç¥ó¤Ï°ú¤­¿ô¤òɬÍפȤ¹¤ë¡£ optional_argument (¤Þ¤¿¤Ï 2) ¤Ê¤é¡¢¥ª¥×¥·¥ç¥ó¤Ï°ú¤­¿ô¤ò¤È¤Ã¤Æ¤â ¤È¤é¤Ê¤¯¤Æ¤âÎɤ¤¡£
flag
Ť¤¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ë·ë²Ì¤ÎÊÖ¤·Êý¤ò»ØÄꤹ¤ë¡£flag ¤¬ NULL ¤Ê¤é getopt_long() ¤Ï val ¤òÊÖ¤¹ (Î㤨¤Ð¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥°¥é¥à¤Ï¡¢ val ¤ËÅù²Á¤Ê¥ª¥×¥·¥ç¥óʸ»ú¤òÂåÆþ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë)¡£ NULL °Ê³°¤Î¾ì¹ç¤Ë¤Ï¡¢ getopt_long() ¤Ï 0 ¤òÊÖ¤¹¡£ ¤³¤Î¤È¤­¥ª¥×¥·¥ç¥ó¤¬¸«¤Ä¤«¤ë¤È flag ¤¬¥Ý¥¤¥ó¥È¤¹¤ëÊÑ¿ô¤Ë val ¤¬ÂåÆþ¤µ¤ì¤ë¡£¸«¤Ä¤«¤é¤Ê¤¤¤È¤³¤ÎÊÑ¿ô¤ÏÊѹ¹¤µ¤ì¤Ê¤¤¡£
val
ÊÖ¤êÃÍ¡¢¤Þ¤¿¤Ï flag ¤¬¥Ý¥¤¥ó¥È¤¹¤ëÊÑ¿ô¤Ø¥í¡¼¥É¤µ¤ì¤ëÃÍ¡£

ÇÛÎó¤ÎºÇ¸å¤ÎÍ×ÁǤϡ¢Á´¤Æ 0 ¤ÇËä¤á¤é¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

longindex ¤Ï¡¢NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢ Ť¤¥ª¥×¥·¥ç¥ó¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò longopts ¤«¤é¤ÎÁêÂаÌÃ֤Ȥ·¤ÆÊÝ»ý¤·¤Æ¤¤¤ëÊÑ¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤È¤Ê¤ë¡£

getopt_long_only() ¤Ï getopt_long() ¤ÈƱÍͤÎÆ°ºî¤ò¤¹¤ë¤¬¡¢ '-' ¤â '--' ¤ÈƱÍͤˡ¢Ä¹¤¤¥ª¥×¥·¥ç¥ó¤È¤·¤Æ°·¤ï¤ì¤ë¡£'-' ¤Ç»Ï¤Þ¤ë ('--' °Ê³°¤Î) ¥ª¥×¥·¥ç¥ó¤¬¡¢Ä¹¤¤¤â¤Î¤Ë¤Ï¥Þ¥Ã¥Á¤·¤Ê¤¤¤¬Ã»¤¤¤â¤Î¤Ë ¥Þ¥Ã¥Á¤¹¤ë¾ì¹ç¤Ë¤ª¤¤¤Æ¤Ï¡¢¤½¤ì¤Ïû¤¤¥ª¥×¥·¥ç¥ó¤È¤·¤Æ²ò¼á¤µ¤ì¤ë¡£

ÊÖ¤êÃÍ

¥ª¥×¥·¥ç¥ó¤¬Àµ¾ï¤Ë¸«¤Ä¤«¤ì¤Ð getopt() ¤Ï¤½¤Î¥ª¥×¥·¥ç¥óʸ»ú¤òÊÖ¤¹¡£ ¤¹¤Ù¤Æ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Î²òÀϤ¬½ª¤ï¤Ã¤¿¤é¡¢ getopt() ¤Ï -1 ¤òÊÖ¤¹¡£ optstring ¤Ë´Þ¤Þ¤ì¤Ê¤¤¥ª¥×¥·¥ç¥óʸ»ú¤¬¸«¤Ä¤«¤ë¤È¡¢'?' ¤òÊÖ¤¹¡£ °ú¤­¿ô¤¬Â­¤ê¤Ê¤¤¥ª¥×¥·¥ç¥ó¤¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¢ ÊÖ¤êÃÍ¤Ï optstring ¤ÎºÇ½é¤Îʸ»ú¤Ë¤è¤ë°Û¤Ê¤ë: ºÇ½é¤Îʸ»ú¤¬ ':' ¤Ç¤¢¤ì¤Ð ':' ¤òÊÖ¤·¡¢ ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï '?' ¤òÊÖ¤¹¡£

getopt_long() ¤È getopt_long_only() ¤â¡¢ û¤¤¥ª¥×¥·¥ç¥óʸ»ú¤òǧ¼±¤·¤¿¾ì¹ç¤Ë¤Ï¤½¤Îʸ»ú¤òÊÖ¤¹¡£ Ť¤¥ª¥×¥·¥ç¥ó¤ËÂФ·¤Æ¤Ï¡¢ flag ¤¬ NULL ¤Ê¤é val ¤òÊÖ¤·¡¢ flag ¤¬ NULL °Ê³°¤Ê¤é 0 ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤È -1 ¤ÎÊÖ¤êÃÍ¤Ï getopt() ¤ÈƱ¤¸¤Ç¤¢¤ë¡£ ¤µ¤é¤Ë '?' ¤Ï¡¢¥Þ¥Ã¥Á¤¬³ÎÄê¤Ç¤­¤Ê¤¤¾ì¹ç¤ä;ʬ¤Ê¥Ñ¥é¥á¡¼¥¿¡¼¤¬¤¢¤ë¾ì¹ç¤Ë¤âÊ֤롣

´Ä¶­

POSIXLY_CORRECT
¤³¤ì¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢È󥪥ץ·¥ç¥ó¤Î°ú¤­¿ô¤ËÅþ㤷¤¿»þÅÀ¤Ç¥ª¥×¥·¥ç¥ó ¤ËÂФ¹¤ëÁàºî¤¬Ää»ß¤µ¤ì¤ë¡£
_<PID>_GNU_nonoption_argv_flags_
¤³¤ÎÊÑ¿ô¤Ï bash 2.0 ¤¬ GNU libc ¤ÈÄÌ¿®¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤¿¡£ ¤É¤Î°ú¤­¿ô¤¬¥ï¥¤¥ë¥É¥«¡¼¥É¤òŸ³«¤·¤¿·ë²Ì¤Ç¡¢ ¤·¤¿¤¬¤Ã¤Æ¥ª¥×¥·¥ç¥ó¤È¤ß¤Ê¤¹¤Ù¤­¤Ç¤Ê¤¤¤«¤òÃΤ餻¤ë¤â¤Î¤Ç¤¢¤ë¡£ ¤³¤Îµ¡Ç½¤Ï bash ¤Î¥Ð¡¼¥¸¥ç¥ó 2.01 ¤Çºï½ü¤µ¤ì¤¿¤¬¡¢GNU libc ¤Ë¤Ï¤Þ¤À»Ä¤Ã¤Æ¤¤¤ë¡£

½àµò

getopt():
´Ä¶­ÊÑ¿ô POSIXLY_CORRECT ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï POSIX.2 ¤È POSIX.1-2001 ¤Ë½àµò¤¹¤ë¡£ ¾¤Î¾ì¹ç¤Ï argv ¤ÎÍ×ÁǤÏËÜÅö¤Î°ÕÌ£¤Ç¤ÎÄê¿ô¤Ë¤Ï¤Ê¤é¤Ê¤¤¡£ ¤Ê¤¼¤Ê¤é½ç½ø¤¬Êѹ¹¤µ¤ì¤Æ¤·¤Þ¤¦¤«¤é¤Ç¤¢¤ë¡£ ¤¿¤À¤·¤½¤ì¤é¤Ï¡¢¥×¥í¥È¥¿¥¤¥×¤Ç¤ÏÄê¿ô¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë¤·¤Æ¤¢¤ë¡£ ¤³¤ì¤Ï¾¤Î¥·¥¹¥Æ¥à¤È¤Î¸ß´¹À­¤Î¤¿¤á¤Ç¤¢¤ë¡£

¸Å¤¤¼ÂÁõ¤Î¤¤¤¯¤Ä¤«¤Ç¤Ï¡¢ getopt() ¤Ï <stdio.h> ¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤¿¡£ SUSv1 ¤Ç¤Ï¡¢ <unistd.h> ¤« <stdio.h> ¤Î¤É¤Á¤é¤«¤Ç Àë¸À¤·¤Æ¤â¤è¤«¤Ã¤¿¡£ POSIX.1-2001 ¤Ç¤Ï¡¢ getopt ¤ÎÀë¸À¤ò <stdio.h> ¤Ç¹Ô¤¦¤Î¤Ï¡Ö²áµî¤Î̾»Ä¡×¤Ç¤¢¤ë¤È¤µ¤ì¤¿¡£ POSIX.1-2001 ¤Ç¤Ï <stdio.h> ¤ÇÀë¸À¤ò¹Ô¤¦¤³¤È¤òǧ¤á¤Æ¤¤¤Ê¤¤¡£

¥Ð¥°

POSIX.2 ¤Ë¤ª¤±¤ë getopt() ¤Î»ÅÍͤˤϵ»½ÑŪ¤ÊÌäÂ꤬¤¢¤ê¡¢ ¤½¤ÎÆâÍÆ¤Ï POSIX.2 Interpretation 150 ¤Ëµ­¤µ¤ì¤Æ¤¤¤ë¡£ GNU ¤Ë¤è¤ë¼ÂÁõ¤Ç¤Ï (¤ª¤½¤é¤¯Â¾¤Î¤¹¤Ù¤Æ¤Î¼ÂÁõ¤Ç¤â)¡¢ »ÅÍͤȰۤʤëÀµ¤·¤¤Æ°ºî¤ò¤¹¤ë¤è¤¦¤Ë¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£

Îã

°Ê²¼¤Ë¼¨¤¹´Êñ¤Ê¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤Ç¤Ï¡¢ Æó¼ïÎà¤Î¥×¥í¥°¥é¥à¥ª¥×¥·¥ç¥ó¤ò°·¤¦¤Î¤Ë getopt() ¤ò»ÈÍѤ·¤Æ¤¤¤ë¡£°ì¤Ä¤ÏÃͤòȼ¤ï¤Ê¤¤ -n ¤Ç¡¢¤â¤¦°ì¤Ä¤ÏÂбþ¤¹¤ëÃͤ¬É¬Í×¤Ê -t val ¤Ç¤¢¤ë¡£



#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>



int

main(int argc, char *argv[])

{

    int flags, opt;

    int nsecs, tfnd;



    nsecs = 0;

    tfnd = 0;

    flags = 0;

    while ((opt = getopt(argc, argv, "nt:")) != -1) {

        switch (opt) {

        case 'n':

            flags = 1;

            break;

        case 't':

            nsecs = atoi(optarg);

            tfnd = 1;

            break;

        default: /* '?' */

            fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",

                    argv[1]);

            exit(EXIT_FAILURE);

        }

    }



    printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind);



    if (optind >= argc) {

        fprintf(stderr, "Expected argument after options\n");

        exit(EXIT_FAILURE);

    }



    printf("name argument = %s\n", argv[optind]);



    /* Other code omitted */



    exit(EXIT_SUCCESS);

}

°Ê²¼¤Ï¡¢ getopt_long() ¤Î»ÈÍÑË¡¤ò¡¢¤Û¤Ü¤¹¤Ù¤Æ¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ¼¨¤·¤¿¥×¥í¥°¥é¥à¤ÎÎã¤Ç¤¢¤ë¡£




#include <stdio.h>     /* for printf */

#include <stdlib.h>    /* for exit */

#include <getopt.h>



int

main(int argc, char **argv) {

    int c;

    int digit_optind = 0;



    while (1) {

        int this_option_optind = optind ? optind : 1;

        int option_index = 0;

        static struct option long_options[] = {

            {"add", 1, 0, 0},

            {"append", 0, 0, 0},

            {"delete", 1, 0, 0},

            {"verbose", 0, 0, 0},

            {"create", 1, 0, 'c'},

            {"file", 1, 0, 0},

            {0, 0, 0, 0}

        };



        c = getopt_long(argc, argv, "abc:d:012",

                 long_options, &option_index);

        if (c == -1)

            break;



        switch (c) {

        case 0:

            printf("option %s", long_options[option_index].name);

            if (optarg)

                printf(" with arg %s", optarg);

            printf("\n");

            break;



        case '0':

        case '1':

        case '2':

            if (digit_optind != 0 && digit_optind != this_option_optind)

              printf("digits occur in two different argv-elements.\n");

            digit_optind = this_option_optind;

            printf("option %c\n", c);

            break;



        case 'a':

            printf("option a\n");

            break;



        case 'b':

            printf("option b\n");

            break;



        case 'c':

            printf("option c with value '%s'\n", optarg);

            break;



        case 'd':

            printf("option d with value '%s'\n", optarg);

            break;



        case '?':

            break;



        default:

            printf("?? getopt returned character code 0%o ??\n", c);

        }

    }



    if (optind < argc) {

        printf("non-option ARGV-elements: ");

        while (optind < argc)

            printf("%s ", argv[optind++]);

        printf("\n");

    }



    exit(EXIT_SUCCESS);

}

´ØÏ¢¹àÌÜ

getsubopt(3), feature_test_macros(7)