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

GNU                                               9 Junio 2020                                         GETOPT(3)