Поэтому я пишу небольшую программу, которая должна реализовывать базовую версию ls
и принимает необязательные флаги a
, l
, а также R
, В основном я рассмотрел все остальное, но за последнюю неделю или около того я не смог понять, как передать несколько флагов после одного дефиса. Например, моя программа должна быть в состоянии принять ls -alR
, Однако код, который у меня есть для этого (показан ниже и изменен со страницы руководства getopt), не работает в подобных случаях. Случаи как ls -a -l -R
работать просто отлично.
Является getopt
не в состоянии обработать такие варианты? Должен ли я посмотреть в getopt_long
или же getopt_long_only
, или даже посмотреть на разные библиотеки (например, варианты буста)?
//gloabl indicator variables
bool aflag, lflag, Rflag;
//sets Truth values to boolean global indicator variables
//will tell if a, l, or R flags passed into argv
//FIXME need to fix case(s) -alR,...
int main (int argc, char ** argv)
{
int index;
int c;
opterr = 0;
while( (c = getopt (argc, argv, "alR")) != -1 )
{
switch (c)
{
case 'a':
aflag = true;
break;
case 'l':
lflag = true;
break;
case 'R':
Rflag = true;
break;
case '?':
if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
default:
abort ();
}
}
// prints out truth values for flags
printf ("aflag = %d, lflag = %d, Rflag = %d\n", aflag, lflag, Rflag);
//prints out non option arguments
for (index = optind; index < argc; index++)
printf ("Non-option argument %s\n", argv[index]);
//DO OTHER STUFF
return 0;
}
Я должен добавить, что эти флаги не требуют аргументов.
Заранее спасибо!
Задача ещё не решена.