getopt

Para poder seguir esas líneas de actuación, Linux proporciona la prestación getopt, que soporta el uso de opciones con y sin valores y es de fácil utilización. getopt_1Desmenuzandolo tenemos:

getopt_2getopt_3Por ejemplo, la siguiente llamada se usaría para gestionar el ejemplo anterior:

getopt (argc, argv, "if:lr");

Tiene en cuenta las opciones -i, -l, -r y -f, seguidas de un argumento de nombre de archivo. Si solicitamos el comando con los mismos parámetros pero en distinto orden, el comportamiento variará. Puede poner estos conocimientos en práctica en la siguiente sección de ejemplo.

El resultado de getopt es el siguiente carácter de la opción que aparece en la matriz argv (si hay alguna). Solicite getopt repetidamente para obtener, una a una, todas las opciones. Tiene el siguiente comportamiento:

  • Si la opción adopta un valor, dicho valor será señalado por la variable externa optarg.
  • getopt envía -1 cuando ya no quedan opciones para procesar. Un argumento especial, --, hará que getopt deje de escanear las opciones.
  • Si una opción  requiere un valor (como -f en nuestro ejemplo) y no se le proporciona ningún valor, getopt suele enviar ?. Colocando dos puntos como el primer carácter de la cadena de opciones, getopt envía : en vez de ? cuando no se proporciona valor alguno.

La variable externa, optind, empieza con el índice del siguiente argumento que hay que procesar. getopt la usa para recordar hasta dónde llegó. Normalmente, los programas no tienen que configurar esta variable. Una vez que se han procesado todos los argumentos de opción, optind indica donde se pueden encontrar el resto de argumentos en la parte final de la matriz argv.

Algunas versiones de getopt se detendrán en el primer argumento que no sea de opción, enviando -1 y configurando optind. Otros, entre los que se encuentran los que proporcionan Linux, pueden procesar las opciones independientemente de su posición en los argumentos del programa. Tenga en cuenta que, en este caso, getopt si que reescribe la matriz argv, de manera que todos los argumentos que no son de opción se presentan juntos, comenzando con argv [optind]. Para la versión GNU de getopt, este comportamiento lo controla la variable de entorno POXISLY_CORRECT. Si está configurada, getopt se detendrá en el primer argumento que no sea de opción. Además, algunas implementaciones de getopt muestran mensajes de error si aparece una opción desconocida. La especificación POSIX dice que la variable opterr no es cero, getopt mostrará un mensaje de error a stderr.

atras

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s