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





0 Referencias