É possível mover para trás através de um getopt_long lista de argumento?
-
16-09-2020 - |
Pergunta
Eu gostaria de delegar a um de vários possíveis listas de argumentos com base no facto de determinados argumentos estão presentes, ao longo das linhas 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
E a melhor maneira que eu posso pensar em fazer isso perfeitamente é ter main()
processo todas as opções e decidir qual das várias funções para chamar ao processo o restante.
Nota que eu não pretende restringir a ordem, de modo que as opções só podem ocorrer primeiro.
O meu problema é que se eu reset optind
1 antes de analisar os argumentos para uma segunda vez, getopt_long
segfaults passando uma seqüência de caracteres inválida para strncmp
- então eu acho que eu não deveria estar brincando com optind.
Eu tive um google, e não pode encontrar qualquer referência sobre se é possível saltar em torno do getopt_long
lista de argumento (eu sei que é possível getopt
), se for, como eu faço isso?
Eu prefiro não usar qualquer não-bibliotecas padrão.(A linguagem é simples, c, c++, por favor)
Solução
Meu problema era que eu não tinha definido a última linha de meu static struct option long_options[]
matriz de zeros, definir corretamente corrige o erro.
GNU getopt também requer optind
para ser reposto a 0 e não 1 para uma correcta reposição de seu estado interno.