getopt в Mac OS X
Мне нужно разобрать аргументы используя getopt
функция. Проблема в том, что если у меня есть аргументы до и / или после опций, getopt
не работает Обработка опций прекращается, как только встречается необязательный аргумент.
Например: tftp ip port [-b blksize] src dest
не работает Но tftp [-b blksize] ip port src dest
работает хорошо.
Видимо, мне нужно добавить +
в начале optstring
чтобы иметь возможность смешивать аргументы и параметры, но он не поддерживается в Max OS X в соответствии с https://www.gnu.org/software/gnulib/manual/html_node/getopt.html
У вас есть решение? Благодарю.
1 ответ
Изменить то, что вы передаете getopt
в качестве argv
а также argc
пропустить командную часть.
Например, tftp ip port [-b blksize] src dest
ты притворишься port
в argv[2]
является argv[0]
, Вызов getopt(argc - 2, argv + 2, optstring)
,
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int ch;
while( (ch = getopt(argc - 2, argv + 2, "b:")) != -1 ) {
printf("%c %s\n", ch, optarg);
}
return 0;
}
Это всего лишь пример. Вам нужно добавить логику, чтобы определить, есть ли команда или подкоманда.