Provided by: manpages-es-dev_4.13-4_all bug

NOMBRE

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

SINOPSIS

       #include <unistd.h>

       int getopt(int argc, char * const argv[],
                  const char *optstring);

       extern char *optarg;
       extern int optind, opterr, optopt;

       #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);

   Requisitos de Macros de Prueba de Características para glibc (véase feature_test_macros(7)):

       getopt(): _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE
       getopt_long(), getopt_long_only(): _GNU_SOURCE

DESCRIPCIÓN

       La función getopt() analiza los argumentos de la línea de órdenes. Sus argumentos  argc  y
       argv  son  el número y el vector de argumentos como los pasados a la función main() cuando
       se ejecuta el programa.  Un  elemento  de  argv  que  comience  con  '-'  (y  que  no  sea
       exactamente "-" ni "--") es un elemento de opción. Los caracteres de este elemento (aparte
       del '-' inicial) son caracteres de opción. Si getopt() se  llama  repetidamente,  devuelve
       sucesivamente cada uno de los caracteres de opción de cada uno de los elementos de opción.

       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.

       Si  getopt()  encuentra  otro  carácter  de  opción, lo devuelve, actualizando la variable
       externa optind y una variable estática nextchar  de  forma  que  la  siguiente  llamada  a
       getopt() pueda seguir la búsqueda en el siguiente carácter de opción o elemento de argv.

       Si no hay más caracteres de opción, getopt() devuelve -1.  Entonces optind es el índice en
       argv del primer elemento de argv que no es una opción.

       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 scanning 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.

       While processing the option list, getopt()  can detect two kinds of errors: (1) an  option
       character  that was not specified in optstring 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 in optopt, and returns '?' as the function result.

       *  If the caller has set the global variable opterr to zero, then getopt()  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)   of
          optstring is a colon (':'), then getopt() 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() y getopt_long_only()
       The getopt_long()  function works like getopt()  except that it also accepts long options,
       started with two dashes.  (If the program 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  es  un  puntero  al  primer  elemento de un vector de struct option declarado en
       <getopt.h> como

           struct option {
               const char *name;
               int         has_arg;
               int        *flag;
               int         val;
           };

       Los significados de los diferentes campos son:

       nombre es el nombre de la opción larga.

       has_arg
              es: no_argument (ó 0) si la opción no toma un argumento; required_argument (ó 1) si
              la  opción  requiere  un  argumento; u optional_argument (ó 2) si la opción toma un
              argumento opcional.

       flag   especifica cómo se devuelven los resultados para una opción larga. Si flag es NULL,
              entonces getopt_long() devuelve val. (Por ejemplo, el programa puede poner val como
              el carácter de opción corta equivalente.)  De otro modo, getopt_long() devuelve  0,
              y  flag apunta a una variable que se pone a val si la opción se encuentra, pero que
              se deja intacta si la opción no se encuentra.

       val    es el valor a devolver, o a cargar en la variable apuntada por flag.

       El último elemento del vector tiene que ser llenado con ceros.

       Si longindex no es NULL, apunta a una variable que toma el valor del índice de  la  opción
       larga relativa a longopts.

       getopt_long_only()  es  como  getopt_long(),  pero  tanto '-' como "--" pueden indicar una
       opción larga. Si una opción que empiece por '-' (no "--") no  concordara  con  una  opción
       larga, pero sí con una corta, se consideraría como tal.

VALOR DEVUELTO

       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()  y  getopt_long_only()  también devuelven el carácter de la opción cuendo se
       reconoce una corta. Para una opción larga, devuelven val si flag es  NULL,  y  0  en  otra
       circunstancia.  Las  devoluciones  de error y -1 son las mismas que para getopt(), más '?'
       indicando una concordancia ambigua o un parámetro extraño.

ENTORNO

       POSIXLY_CORRECT
              Si está definida, entonces el procesamiento de las opciones se para tan pronto como
              se encuentre un argumento que no sea una opción.

       _<PID>_GNU_nonoption_argv_flags_
              Esta  variable  era utilizada por bash(1) 2.0 para comunicar a glibc qué argumentos
              eran el resultado de la expansión de comodines y, por tanto, no debían considerarse
              como  opciones.   Este comportamiento se eliminó en la versión 2.01 de bash(1) pero
              el soporte permanece en glibc.

ATRIBUTOS

       Para obtener una explicación de los términos usados en esta sección, véase attributes(7).

       ┌─────────────────────────┬────────────────────┬───────────────────────────┐
       │InterfazAtributoValor                     │
       ├─────────────────────────┼────────────────────┼───────────────────────────┤
       │getopt(), getopt_long(), │ Seguridad del hilo │ MT-Unsafe race:getopt env │
       │getopt_long_only()       │                    │                           │
       └─────────────────────────┴────────────────────┴───────────────────────────┘

CONFORME A

       getopt():
              POSIX.1-2001,   POSIX.1-2008,   and  POSIX.2,  provided  the  environment  variable
              POSIXLY_CORRECT is set.  Otherwise, the  elements  of  argv  aren't  really  const,
              because these functions permute them.  Nevertheless, const is used 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-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>.

       getopt_long() y getopt_long_only():
              These functions are GNU extensions.

NOTAS

       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 of optstring,  or
       changes  the  value  of  POSIXLY_CORRECT  between  scans,  must  reinitialize getopt()  by
       resetting optind to 0, rather than the traditional value of 1.  (Resetting to 0 forces the
       invocation  of an internal initialization routine that rechecks POSIXLY_CORRECT and checks
       for GNU extensions in optstring.)

EJEMPLOS

   getopt()
       The following trivial example program uses getopt()  to handle two  program  options:  -n,
       with no associated value; and -t val, which expects an associated value.

       #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[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()
       El  siguiente programa de ejemplo ilustra el empleo de getopt_long() con la mayoría de sus
       características.

       #include <stdio.h>     /* para printf */
       #include <stdlib.h>    /* para 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",     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);
       }

VÉASE TAMBIÉN

       getopt(1), getsubopt(3)

COLOFÓN

       Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar  una
       descripción  del  proyecto, información sobre cómo informar errores y la última versión de
       esta página en https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN

       La traducción al español de esta página del  manual  fue  creada  por  Gerardo  Aburruzaga
       García  <gerardo.aburruzaga@uca.es>,  Juan  Piernas  <piernas@ditec.um.es>  y Miguel Pérez
       Ibars <mpi79470@alu.um.es>

       Esta traducción es documentación libre; lea  la  GNU  General  Public  License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  o posterior con respecto a las condiciones de
       copyright.  No existe NINGUNA RESPONSABILIDAD.

       Si encuentra algún error en la traducción de esta  página  del  manual,  envíe  un  correo
       electrónico a debian-l10n-spanish@lists.debian.org ⟨⟩.