getopt解析

来源:互联网 发布:vb 数值转换为字符 编辑:程序博客网 时间:2024/06/03 22:41

getopt详解

       The  getopt()  function  parses  the  command-line  arguments.  Its arguments argc and argv are the argument count and array as       passed to the main() function on program invocation.  An element of argv that starts with '-' (and is not exactly "-" or  "--")       is  an  option  element.   The  characters  of this element (aside from the initial '-') are option characters.  If getopt() is       called repeatedly, it returns successively each of the option characters from each of the option elements.       The variable optind is the index of the next element to be processed in argv.  The system initializes this  value  to  1.   The       caller can reset it to 1 to restart scanning of the same argv, or when scanning a new argument vector.       If getopt() finds another option character, it returns that character, updating the external variable optind and a static vari‐       able nextchar so that the next call to getopt() can resume the scan with the following option character or argv-element.       If there are no more option characters, getopt() returns -1.  Then optind is the index in argv of the first  argv-element  that       is not an option.       optstring  is  a  string  containing  the legitimate option characters.  If such a character is followed by a colon, the option       requires an argument, so getopt() places a pointer to the following text in the same argv-element, or the text of the following       argv-element,  in optarg.  Two colons mean an option takes an optional arg; if there is text in the current argv-element (i.e.,       in the same word as the option name itself, for example, "-oarg"), then it is returned in optarg, otherwise optarg  is  set  to       zero.   This  is  a  GNU extension.  If optstring contains W followed by a semicolon, then -W foo is treated as the long option       --foo.  (The -W option is reserved by POSIX.2 for implementation extensions.)  This behavior is a GNU extension, not  available       with libraries before glibc 2.       By  default,  getopt()  permutes  the  contents of argv as it scans, so that eventually all the nonoptions are at the end.  Two       other modes are also implemented.  If the first character of optstring is '+' or the environment  variable  POSIXLY_CORRECT  is       set,  then option processing stops as soon as a nonoption argument is encountered.  If the first character of optstring is '-',       then each nonoption argv-element is handled as if it were the argument of an option with character code 1.  (This  is  used  by       programs that were written to expect options and other argv-elements in any order and that care about the ordering of the two.)       The special argument "--" forces an end of option-scanning regardless of the scanning mode.       If getopt() does not recognize an option character, it prints an error message to stderr, stores the character in  optopt,  and       returns '?'.  The calling program may prevent the error message by setting opterr to 0.       If  getopt()  finds an option character in argv that was not included in optstring, or if it detects a missing option argument,       it returns '?' and sets the external variable optopt to the actual option character.  If the  first  character  (following  any       optional  '+'  or  '-'  described  above) of optstring is a colon (':'), then getopt() returns ':' instead of '?' to indicate a       missing option argument.  If an error was detected, and the first character of optstring is not a colon, and the external vari‐       able opterr is nonzero (which is the default), getopt() prints an error message.   getopt_long() and getopt_long_only()       The getopt_long() function works like getopt() except that it also accepts long options, started with two dashes.  (If the pro‐       gram accepts only long options, then optstring should be specified as an empty string (""), not NULL.)  Long option  names  may       be abbreviated if the abbreviation is unique or is an exact match for some defined option.  A long option may take a parameter,       of the form --arg=param or --arg param.       longopts is a pointer to the first element of an array of struct option declared in <getopt.h> as           struct option {               const char *name;               int         has_arg;               int        *flag;               int         val;           };       The meanings of the different fields are:       name   is the name of the long option.       has_arg              is: no_argument (or 0) if the option does not take an argument; required_argument (or 1) if the option requires an argu‐              ment; or optional_argument (or 2) if the option takes an optional argument.       flag   specifies  how  results are returned for a long option.  If flag is NULL, then getopt_long() returns val.  (For example,              the calling program may set val to the equivalent short option character.)  Otherwise, getopt_long() returns 0, and flag              points to a variable which is set to val if the option is found, but left unchanged if the option is not found.       val    is the value to return, or to load into the variable pointed to by flag.       The last element of the array has to be filled with zeros.       If longindex is not NULL, it points to a variable which is set to the index of the long option relative to longopts.       getopt_long_only()  is  like  getopt_long(), but '-' as well as "--" can indicate a long option.  If an option that starts with       '-' (not "--") doesn't match a long option, but does match a short option, it is parsed as a short option instead.RETURN VALUE       If an option was successfully found, then getopt() returns the option character.  If all command-line options have been parsed,       then  getopt()  returns  -1.   If  getopt() encounters an option character that was not in optstring, then '?' is returned.  If       getopt() encounters an option with a missing argument, then the return value depends on the first character in optstring: if it       is ':', then ':' is returned; otherwise '?' is returned.       getopt_long()  and  getopt_long_only()  also return the option character when a short option is recognized.  For a long option,       they return val if flag is NULL, and 0 otherwise.  Error and -1 returns are the same as for getopt(), plus '?' for an ambiguous       match or an extraneous parameter.ENVIRONMENT       POSIXLY_CORRECT              If this is set, then option processing stops as soon as a nonoption argument is encountered.       _<PID>_GNU_nonoption_argv_flags_              This  variable was used by bash(1) 2.0 to communicate to glibc which arguments are the results of wildcard expansion and              so should not be considered as options.  This behavior was removed in bash(1) version 2.01, but the support  remains  in              glibc.CONFORMING TO       getopt():              POSIX.2  and  POSIX.1-2001,  provided  the environment variable POSIXLY_CORRECT is set.  Otherwise, the elements of argv              aren't really const, because we permute them.  We pretend they're const in the prototype to  be  compatible  with  other              systems.              The use of '+' and '-' in optstring is a GNU extension.              On  some older implementations, getopt() was declared in <stdio.h>.  SUSv1 permitted the declaration to appear in either              <unistd.h> or <stdio.h>.  POSIX.1-2001 marked the use of <stdio.h> for this purpose as LEGACY.   POSIX.1-2001  does  not              allow the declaration to appear in <stdio.h>.       getopt_long() and getopt_long_only():              These functions are GNU extensions.

简解

这个东西会对argv中的参数进行解析.首先碰到- 然后对-之后的解析.然后返回-之后的东西. 如果继续调用,则会返回第二个-之后的东西//注意:不解析不以-开始的参数,直解析以-开始的参数在解析,其实上面说的不全对,返回的不一定是-之后的东西,他会判定-之后的东西是否在getopt函数的第三个参数中,如果有,则返回,如果没有,则会打印出invalid option -- 'p' ,然后返回一个 ?第三个参数可以为"?hvVDarsuwAJSF:f:" ,f 和 F 必须要加参数 ,有参数 返回f,无参数返回?//即如果后面有:,则表示要加参数另外optind是已经被解析的参数个个数+1,即包括命令而且getopt之后会对argv里面的参数重新排序

实验代码

点我下载

0 0
原创粉丝点击