У меня есть следующий код, и я не уверен, как добавить необязательные аргументы для расположения файлов после -arguments при запуске из командной строки. Я много читал, но меня это просто смущает. Вот код, как он есть в настоящее время.
int c;
while ((c = getopt(argc, argv, "vdras")) != EOF) {
switch (c) {
case 'v': v = true;
break;
case 'd': d = true;
break;
case 'r' : r = true;
break;
case 'a' : a = true;
break;
case 's' : s = true;
break;
}
}
argc -= optind;
argv += optind;
Теперь мне нужно иметь возможность добавить файл в конце всех этих команд (или подмножество этих команд).
Таким образом, я мог бы ввести -rda file здесь или -a filehere или просто filehere в качестве допустимых аргументов для программы.
Я читаю ЭТОТ ссылка, которая заставляет меня поверить, что нужно ставить двойные точки с запятой между всеми параметрами командной строки, поэтому это будет выглядеть так:
while ((c = getopt(argc, argv, "::v::d::r::a::s::")) != EOF) {
позволил бы мне указать необязательные аргументы после условий, однако я не знаю, как их захватить. Например, я пытался привести случаи, когда я вводил случайное имя файла и распечатывал какой-то тестовый код, просто чтобы я знал, что он работает, но я не могу понять, как это правильно. Мне интересно, нужно ли мне каким-то образом включать * optarg в мой переключатель, который позволит мне получить любые аргументы после опций, но я не совсем уверен, как это сделать. Любое объяснение было бы здорово.
Вы читали справочная страница? Аргумент option, если он есть, будет в глобальной переменной optarg
,
Даже ссылка у вас там говорит то же самое. Ваша строка параметров не нуждается в ведущей ::
либо — только те, что после букв, что-то значат.
Изменить: Вот полный рабочий пример того, что, похоже, вы пытаетесь сделать:
#include <unistd.h>
#include <iostream>
int main(int argc, char **argv)
{
int ch;
while ((ch = getopt(argc, argv, "v:")) != -1)
{
switch (ch)
{
case 'v':
std::cout << optarg << std::endl;
break;
}
}
return 0;
}
И вывод:
$ ./example -v abcde
abcde
Других решений пока нет …