¿Alguien me puede ayudar con la función getopt?biblioteca de procesamiento de línea de comandos - getopt
Cuando hago lo siguiente en el principal:
char *argv1[] = {"testexec","-?"};
char *argv2[] = {"testexec","-m","arg1"};
int cOption;
/* test for -? */
setvbuf(stdout,(char*)NULL,_IONBF,0);
printf("\n argv1 ");
while ((cOption = getopt (2, argv1, "m:t:n:fs?")) != -1) {
switch(cOption){
case 'm':
printf("\n -m Arg : %s \n",optarg);
break;
case '?':
printf("\n -? Arg ");
break;
case 'n':
printf("\n -n Arg : %s \n",optarg);
break;
}
}
printf("\n argv2 ");
while ((cOption = getopt (3, argv2, "m:t:n:fs?")) != -1) {
switch(cOption){
case 'm':
printf("\n -m Arg : %s \n",optarg);
break;
case '?':
printf("\n -? Arg : %s \n",optarg);
break;
case 'n':
printf("\n -n Arg : %s \n",optarg);
break;
}
}
estoy corriendo este código en RHEL3 que utiliza vieja versión de libc. No sé cuál ser exacto.
Ahora el problema es que getopt no funciona la segunda vez con argv2. Pero si comento la primera llamada de getopt con argv1, funciona.
¿Puede alguien decirme qué estoy haciendo mal aquí?
Buena respuesta, pero si bien es cierto, intenté cambiarla en el código de ejemplo y no solucionó el problema específico que se le preguntaba. –
David, tienes razón. Acabo de detectar ese error y olvidé el resto :) Edité la respuesta, ya que noté que si actualiza el valor optind a 1, el código funciona como se esperaba. Recuerdos –
Cuidado: el estándar POSIX no establece que reiniciar la opción a 1 reiniciará getopt() al estado inicial, especialmente si no analizó por completo los primeros argumentos. Por ejemplo, si el primer argumento es -xy y se detiene después de procesar x, no hay garantía de que funcione un reinicio de optind. –