getopt

06 05 2008 Programación
Las funciones getopt y getopt_long sirven para automatizar el paso de parámetros al programa en linea de comandos. Estas funciones también pertenecen a la librería C de GNU. Sus usos y ejemplos son inmediatos en cuando comenzamos a escribir comandos en nuestra consola.

# ls -la
# find . -name "*.mp3"

    -la y -name son los parámetros que deben ser analizados cuando invocamos estos programas para su correcto funcionamiento. Getopt y getopt_long nos servirán de mucha ayuda para analizar y detectar todos esto parámetros.

    Debemos incluir el archivo de cabecera unistd.h para poder emplear getopt una vez hecho esto la firma de la función es la siguiente:

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

    Para getopt_long también necesitamos el archivo de cabecera unistd.h:

int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);

    getopt emplea o fija varias variables, estas son:

int opterr - Si le damos un valor igual a 0 getopt no indicara imprimirá en stderr ningún mensaje de error (por defecto si que lo hará)
int optopt - Si getopt encuentra una opción no reconocida o sin un parámetro necesario, entonces almacena este caracter en esta varible.
int optint - La variable fijada por getopt nos da el indice del parámetro a ser analizado.
char* optarg - Fijada por getopt y que nos da la posición del argumento a analizar.

    La función getopt obtiene el siguiente argumento en la lista de argumentos que se le pasan al programa. Normalmente los argumentos son los pasados a la función main al comienzo de nuestro programa (argc y argv)

    optstring es una cadena que especifica todos los caracteres válidos para nuestro programa. Un carácter seguido de dos puntos ':' indica que esta opción necesita un argumento y si está seguida de dos dobles puntos '::' indicamos que ese argumento es opcional (sólo GNU), por lo tanto la cadena:

"lac:d::"

    Indica que nuestro programa acepta el parametro -l, -a el parámetro -c seguido de un argumento y -d que puede no estar seguido de un argumento esto podría ser:

-l -a -c /tmp/a.txt -d

ó

-la -d -c /tmp/a.txt

etc

    getopt va devolviendo el último parámetro analizado y al final cuando no queda ningúno más por analizar devuelve -1

    Si la opción tiene un argumento este es colocado dentro de optarg

    El argumento especial '--' termina el análisis de opciones posteriores

    Si getopt encuentra una opción que no aparece en la lista de opciones disponibles devuelve '?' e introduce en la variable externa optopt este argumento.

    Este es un ejemplo del uso de getopt:

#include
#include
#include
#include

int main (int argc, char **argv)
{
int aflag = 0;
int bflag = 0;
char *cvalue = NULL;
int index;
int c;

opterr = 0;

while ((c = getopt (argc, argv, "abc:")) != -1)
switch (c)
{
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cvalue = optarg;
break;
case '?':
if (optopt == 'c')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr,
"Unknown option character `\\x%x'.\n",
optopt);
return 1;
default:
abort ();
}

printf ("aflag = %d, bflag = %d, cvalue = %s\n",
aflag, bflag, cvalue);

for (index = optind; index < argc; index++)
printf ("Non-option argument %s\n", argv[index]);
return 0;
}


Bookmark getopt  at del.icio.us Digg getopt Mixx getopt Bloglines getopt Technorati getopt Fark this: getopt Bookmark getopt  at YahooMyWeb Bookmark getopt  at Furl.net Bookmark getopt  at reddit.com Bookmark getopt  at blinklist.com Bookmark getopt  at Spurl.net Bookmark getopt  at NewsVine Bookmark getopt  at Simpy.com Bookmark getopt  at blogmarks Bookmark getopt  with wists Bookmark getopt  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Referencias


No hay referencias

Comentarios

Mostrar comentarios como (Plano | Hilos)
No hay comentarios

Añadir comentario


Encerrando entre asteriscos convierte el texto en negrita (*palabra*), el subrayado es hecho así: _palabra_.
Smilies normales como :-) y ;-) son convertidos en imágenes.