博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getopt解析
阅读量:4286 次
发布时间:2019-05-27

本文共 8047 字,大约阅读时间需要 26 分钟。

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 
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. _
_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
. SUSv1 permitted the declaration to appear in either
or
. POSIX.1-2001 marked the use of
for this purpose as LEGACY. POSIX.1-2001 does not allow the declaration to appear in
. 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里面的参数重新排序

##实验代码

转载地址:http://evigi.baihongyu.com/

你可能感兴趣的文章
Git 版本控制系統(3) 還沒 push 前可以做的事
查看>>
Git 基礎 - 檢視提交的歷史記錄
查看>>
wifi 連ap command
查看>>
git clean reset checkout
查看>>
[轉載]6個超強網站讓你查到最道地的英文
查看>>
HUB 與 Switch 差別
查看>>
linux產生 core dump文件方法及設置
查看>>
How to pass macro definition from “makefile” command line arguments to C source code?
查看>>
英文句型
查看>>
mtd and /dev/mtd*相關資料
查看>>
cp: cannot create symbolic link to fat format of usb: Operation not permitted
查看>>
MTD bad Block issue
查看>>
How to change network interface name
查看>>
ubifs and ubi and mtd
查看>>
shell script set 用法
查看>>
英文序數寫法與唸法 Ordinal Numbers(轉載)
查看>>
DVB-S info
查看>>
绿盟扫描操作指导
查看>>
理解链路本地址与站点本地地址
查看>>
/proc/mtd 各个参数含义 -- linux内核
查看>>