Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


getopt(3) — Linux manual page

NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ENVIRONMENT |ATTRIBUTES |VERSIONS |STANDARDS |HISTORY |NOTES |EXAMPLES |SEE ALSO |COLOPHON

getopt(3)                Library Functions Manualgetopt(3)

NAME        top

       getopt, getopt_long, getopt_long_only, optarg, optind, opterr,       optopt - Parse command-line options

LIBRARY        top

       Standard C library (libc,-lc)

SYNOPSIS        top

#include <unistd.h>int getopt(intargc, char *argv[],const char *optstring);extern char *optarg;extern intoptind,opterr,optopt;#include <getopt.h>int getopt_long(intargc, char *argv[],const char *optstring,const struct option *longopts, int *longindex);int getopt_long_only(intargc, char *argv[],const char *optstring,const struct option *longopts, int *longindex);   Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):getopt():           _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCEgetopt_long(),getopt_long_only():           _GNU_SOURCE

DESCRIPTION        top

       Thegetopt() function parses the command-line arguments.  Its       argumentsargc andargv are the argument count and array as passed       to themain() function on program invocation.  An element ofargv       that starts with '-' (and is not exactly "-" or "--") is an option       element.  The characters of this element (aside from the initial       '-') are option characters.  Ifgetopt() is called repeatedly, it       returns successively each of the option characters from each of       the option elements.       The variableoptind is the index of the next element to be       processed inargv.  The system initializes this value to 1.  The       caller can reset it to 1 to restart scanning of the sameargv, or       when scanning a new argument vector.       Ifgetopt() finds another option character, it returns that       character, updating the external variableoptind and a static       variablenextchar so that the next call togetopt() can resume the       scan with the following option character orargv-element.       If there are no more option characters,getopt() returns -1.  Thenoptind is the index inargv of the firstargv-element that is not       an option.optstring is a string containing the legitimate option characters.       A legitimate option character is any visible one byteascii(7)       character (for whichisgraph(3) would return nonzero) that is not       '-', ':', or ';'.  If such a character is followed by a colon, the       option requires an argument, sogetopt() places a pointer to the       following text in the sameargv-element, or the text of the       followingargv-element, inoptarg.  Two colons mean an option       takes an optional arg; if there is text in the currentargv-       element (i.e., in the same word as the option name itself, for       example, "-oarg"), then it is returned inoptarg, otherwiseoptarg       is set to zero.  This is a GNU extension.  Ifoptstring containsW       followed by a semicolon, then-W foois treated as the long option--foo.  (The-Woption 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 ofargv as it scans, so       that eventually all the nonoptions are at the end.  Two other       scanning modes are also implemented.  If the first character ofoptstring is '+' or the environment variablePOSIXLY_CORRECTis       set, then option processing stops as soon as a nonoption argument       is encountered.  If '+' is not the first character ofoptstring,       it is treated as a normal option.  IfPOSIXLY_CORRECTbehaviour is       required in this caseoptstring will contain two '+' symbols.  If       the first character ofoptstring is '-', then each nonoptionargv-       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 otherargv-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.       While processing the option list,getopt() can detect two kinds of       errors: (1) an option character that was not specified inoptstring and (2) a missing option argument (i.e., an option at       the end of the command line without an expected argument).  Such       errors are handled and reported as follows:       •  By default,getopt() prints an error message on standard error,          places the erroneous option character inoptopt, and returns          '?' as the function result.       •  If the caller has set the global variableopterr to zero, thengetopt() does not print an error message.  The caller can          determine that there was an error by testing whether the          function return value is '?'.  (By default,opterr has a          nonzero value.)       •  If the first character (following any optional '+' or '-'          described above) ofoptstring is a colon (':'), thengetopt()          likewise does not print an error message.  In addition, it          returns ':' instead of '?' to indicate a missing option          argument.  This allows the caller to distinguish the two          different types of errors.getopt_long() and getopt_long_only()       Thegetopt_long() function works likegetopt() except that it also       accepts long options, started with two dashes.  (If the program       accepts only long options, thenoptstring 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=paramor--arg param.longopts is a pointer to the first element of an array ofstructoption 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 argument; oroptional_argument(or 2) if the option              takes an optional argument.flag   specifies how results are returned for a long option.  Ifflag is NULL, thengetopt_long() returnsval.  (For              example, the calling program may setval to the equivalent              short option character.)  Otherwise,getopt_long() returns              0, andflag points to a variable which is set toval 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 byflag.       The last element of the array has to be filled with zeros.       Iflongindex is not NULL, it points to a variable which is set to       the index of the long option relative tolongopts.getopt_long_only() is likegetopt_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        top

       If an option was successfully found, thengetopt() returns the       option character.  If all command-line options have been parsed,       thengetopt() returns -1.  Ifgetopt() encounters an option       character that was not inoptstring, then '?' is returned.  Ifgetopt() encounters an option with a missing argument, then the       return value depends on the first character inoptstring: if it is       ':', then ':' is returned; otherwise '?' is returned.getopt_long() andgetopt_long_only() also return the option       character when a short option is recognized.  For a long option,       they returnval ifflag is NULL, and 0 otherwise.  Error and -1       returns are the same as forgetopt(), plus '?' for an ambiguous       match or an extraneous parameter.

ENVIRONMENT        top

POSIXLY_CORRECT              If this is set, then option processing stops as soon as a              nonoption argument is encountered.

ATTRIBUTES        top

       For an explanation of the terms used in this section, seeattributes(7).       ┌────────────────────┬───────────────┬───────────────────────────┐       │InterfaceAttributeValue│       ├────────────────────┼───────────────┼───────────────────────────┤       │getopt(),          │ Thread safety │ MT-Unsafe race:getopt env │       │getopt_long(),     │               │                           │       │getopt_long_only() │               │                           │       └────────────────────┴───────────────┴───────────────────────────┘

VERSIONS        top

       POSIX specifies that theargv array argument should beconst, but       these functions permute its elements unless the environment       variablePOSIXLY_CORRECTis set.const is used in the actual       prototype to be compatible with other systems; however, this page       doesn't show the qualifier, to avoid confusing readers.

STANDARDS        top

getopt()              POSIX.1-2008.getopt_long()getopt_long_only()              GNU.              The use of '+' and '-' inoptstring is a GNU extension.

HISTORY        top

getopt()              POSIX.1-2001, and POSIX.2.       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-1996 marked the use of<stdio.h> for this       purpose as LEGACY.  POSIX.1-2001 does not require the declaration       to appear in<stdio.h>.       Very old versions of glibc were affected by a_PID_GNU_nonoption_argv_flags_environment variable        ⟨https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=bf079e19f50d64aa5e05⟩.

NOTES        top

       A program that scans multiple argument vectors, or rescans the       same vector more than once, and wants to make use of GNU       extensions such as '+' and '-' at the start ofoptstring, or       changes the value ofPOSIXLY_CORRECTbetween scans, must       reinitializegetopt() by resettingoptind to 0, rather than the       traditional value of 1.  (Resetting to 0 forces the invocation of       an internal initialization routine that rechecksPOSIXLY_CORRECT       and checks for GNU extensions inoptstring.)       Command-line arguments are parsed in strict order meaning that an       option requiring an argument will consume the next argument,       regardless of whether that argument is the correctly specified       option argument or simply the next option (in the scenario the       user mis-specifies the command line).  For example, ifoptstring       is specified as "1n:" and the user specifies the command line       arguments incorrectly asprog -n -1, the-n option will be given       theoptargvalue "-1", and the-1 option will be considered to       have not been specified.

EXAMPLES        top

getopt()       The following trivial example program usesgetopt() to handle two       program options:-n, with no associated value; and-t val, which       expects an associated value.       #include <stdio.h>       #include <stdlib.h>       #include <unistd.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[0]);                   exit(EXIT_FAILURE);               }           }           printf("flags=%d; tfnd=%d; nsecs=%d; optind=%d\n",                  flags, tfnd, nsecs, 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()       The following example program illustrates the use ofgetopt_long()       with most of its features.       #include <getopt.h>       #include <stdio.h>     /* for printf */       #include <stdlib.h>    /* for exit */       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",     required_argument, 0,  0 },                   {"append",  no_argument,       0,  0 },                   {"delete",  required_argument, 0,  0 },                   {"verbose", no_argument,       0,  0 },                   {"create",  required_argument, 0, 'c'},                   {"file",    required_argument, 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);       }

SEE ALSO        top

getopt(1),getsubopt(3)

COLOPHON        top

       This page is part of theman-pages (Linux kernel and C library       user-space interface documentation) project.  Information about       the project can be found at        ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report       for this manual page, see       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.       This page was obtained from the tarball man-pages-6.15.tar.gz       fetched from       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on       2025-08-11.  If you discover any rendering problems in this HTML       version of the page, or you believe there is a better or more up-       to-date source for the page, or you have corrections or       improvements to the information in this COLOPHON (which isnot       part of the original manual page), send a mail to       man-pages@man7.orgLinux man-pages 6.15            2025-05-17getopt(3)

Pages that refer to this page:getopt(1)pipesz(1)execve(2)getsubopt(3)pmdagetoptions(3)pmgetoptions(3)rpmlua(8)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp