É possível mover para trás através de um getopt_long lista de argumento?

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

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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top