Es posible mover hacia atrás a través de un getopt_long lista de argumentos?
-
16-09-2020 - |
Pregunta
Me gustaría delegar en uno de varios posibles listas de argumentos basados en concreto argumentos están presentes, a lo largo de las líneas de:
./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid
Y la mejor manera que se me ocurre para hacer esto claramente es tener main()
proceso de todas las opciones y decidir cuál de varias funciones para llamar a procesar el resto.
Tenga en cuenta que no quiero restringir la orden para que las opciones comunes sólo puede ocurrir primero.
Mi problema es que si puedo restablecer optind
a 1 antes de analizar los argumentos para una segunda vez, getopt_long
segfaults por el paso de una cadena no válida para strncmp
- así que supongo que no debería estar jugando con optind.
He tenido una cuenta de google, y no puedo encontrar ninguna referencia sobre si es posible saltar alrededor de la getopt_long
lista de argumentos (sé que es posible que getopt
), si es así, ¿cómo lo hago?
Yo prefiero no utilizar ningún no-estándar de bibliotecas.(El lenguaje es llano c, no c++ por favor)
Solución
Mi problema era que no me había fijado la última fila de mi static struct option long_options[]
matriz de ceros, la configuración de este correctamente corrige el error.
GNU getopt también requiere optind
se restablece a 0 no 1 para la correcta restablecer su estado interno.