如果有错误命令行参数,如何使getopt_long()不打印?

时间:2017-06-08 12:16:29

标签: c linux glibc getopt getopt-long

我有一个程序使用getopt_get()来解析命令行参数。 我的代码是这样的:

int opt;
int optionIndex;
static struct option longOptions[] = {
    {"help", no_argument, NULL, 'h'},
    {"test", no_argument, NULL, 't'},
    {0, 0, 0, 0}
}; 
while ((opt = getopt_long(argc, argv, "ht", longOptions, &optionIndex)) != -1) {
    switch (opt) {
        case 'h':
            help();
            return 0;
            break;
        case 't':
            init();
            test();
            return 0;
            break;
        case '?':
            help();
            return 1;
            break;
        default:
            printf("default.\n");
    }   

当我将正确的命令行参数传递给程序时,它运行良好。 但是当错误的参数传递给程序时,它会打印出像这样烦人且多余的单词。

例如,我传递错误的论点' q'编程

$ ./program -q
./program: invalid option -- 'q'
Usage: -h -t

当有错误的参数时,我只想让它运行我的函数help()而不打印任何单词。

./program: invalid option -- 'q'

如何阻止getopt_long打印这个恼人的单词而只打印什么?

1 个答案:

答案 0 :(得分:3)

阅读fine manual ...

  

如果getopt()无法识别选项字符,则会输出错误   发送给 stderr 的消息,将该字符存储在 optopt 中,然后返回'?'。   调用程序可以通过将 opterr 设置为来阻止错误消息   0

所以,在调用getopt_long

之前尝试一下
opterr = 0;