Es posible mover hacia atrás a través de un getopt_long lista de argumentos?

StackOverflow https://stackoverflow.com/questions/3263971

  •  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)

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top