Мне нужна моя программа для получения нескольких аргументов из командной строки, синтаксис выглядит следующим образом:
getpwd -l user1 user2 ... -L -X -S...
Итак, мне нужно, чтобы пользователи позади опции -l
. Я попытался использовать getopt
, но без большой удачи он работает только тогда, когда я устанавливаю другие параметры перед -l
:
getpwd -L -X -S ... -l user1 user2 ...
Мой код (для -l
и -S
):
while((c = getopt(argc, argv, "l:S")) != -1){
switch(c){
case 'l':
index = optind-1;
while(index < argc){
next = strdup(argv[index]); /* get login */
index++;
if(next[0] != '-'){ /* check if optarg is next switch */
login[lcount++] = next;
}
else break;
}
break;
case 'S':
sflag++; /* other option */
break;
case ':': /* error - missing operand */
fprintf(stderr, "Option -%c requires an operand\n", optopt);
break;
case '?': /* error - unknown option */
fprintf(stderr,"Unrecognized option: -%c\n", optopt);
break;
}
}
optopt
и optind
являются extern int
.
Итак, возникает вопрос: могу ли я использовать функцию getopt()
(или getopt_long()
)? Или мне нужно написать собственный парсер, чтобы получить то, что мне нужно?