使用`getopt`在一个连字符后接受多个选项

时间:2014-11-11 04:36:04

标签: c++ unix ls getopt

所以我正在编写一个小程序,它应该实现ls的基本版本,并接受可选标记alR。我基本上已经覆盖了所有其他内容,但是,在过去一周左右的时间里,我无法弄清楚如何在一个连字符后传递多个标志。例如,我的程序应该能够接收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; 
}

我应该补充一点,这些标志不需要参数。 提前谢谢!

0 个答案:

没有答案