Я пытаюсь понять часть скелетного кода для класса. Предполагаемое использование будет:
./a.out -d -n Foo -i Bar
Скелетный код работает нормально, но я никогда не использовал getopt()
и не могу понять, почему он работает правильно (понимание, что это не имеет никакого отношения к присваиванию, я просто хочу понять это). Как получается, что он обновляет/выходит из цикла while? Я не вижу увеличения указателя или аргументов, переданных ему в цикле, вообще.
char *optString = "-d-n:-i:";
int opt = getopt(argc, argv, optString);
while (opt != -1) {
switch(opt) {
case 'd':
debug = 1;
break;
case 'n':
nameserver_flag = 1;
nameserver = optarg;
break;
case 'i':
hostname = optarg;
break;
case '?':
usage();
exit(1);
default:
usage();
exit(1);
}
opt = getopt(argc, argv, optString);
}
getopt
, является свободным программным обеспечением. Просто изучите исходный код, если хотите в деталях понять, как это работает. И вы также можете использоватьargp
функции. - person Basile Starynkevitch   schedule 26.09.2013optarg
- это скрытый индекс - person asimes   schedule 26.09.2013optarg
не является скрытым индексом. почитаю внимательнее - person asimes   schedule 26.09.2013getopt
определяет глобальные переменные, которые позже используются для возобновления выполнения. То, как именно они работают (за исключением 4 общедоступных), является деталью реализации и на самом деле не важно, кроме знания того, что он сохраняет состояние в памяти и считывает его обратно. - person 3Doubloons   schedule 26.09.2013