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;
}

Это всего лишь пример. Вам нужно добавить логику, чтобы определить, есть ли команда или подкоманда.

Другие вопросы по тегам