所以我正在编写一个小程序,它应该实现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;
}
我应该补充一点,这些标志不需要参数。 提前谢谢!