将选项与参数getopt组合在一起

时间:2013-12-05 20:20:21

标签: c linux command-line gnu getopt

你好我正在编写一个程序,它从c中的命令行中获取多个选项。这些是一些选择:

-l   counts number of lines in file
-w   counts words in file
-c   counts characters in file

为了让它们有效,你可以这样做:

./program -l file.txt
./program -w file.txt
./program -c file.txt

但是我希望将它们组合在一起,以便多个选项仍然能够正常运行。 e.g:

./program -lwc file.txt

将计算行,单词和AND文件,

./program -lw file.txt

将计算行和单词,

./program -cl file.txt

将计算字符和行等。我只是想弄清楚如何做到这一点。这是我的参数代码:

while ( ( c = getopt( argc, argv, "c:w:l:" ) ) != -1 ) { /* get options */
    switch ( c ) {
        case 'c':
            cflag = 1;
            break;
        case 'w':
            wflag = 2;
            break;
        case 'l':
            lflag = 3;
            break;
    }   
}

它只是改变选项,但它仍然无法正常工作。使用我现在的代码,结合两个选项导致段故障。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

:格式的getopt用于带参数的选项。删除它们。

答案 1 :(得分:1)

正如Jens Gustedt所说:从选项中删除冒号以使它们不参与争论。然后,当选项处理完成时(即getopt返回-1),检查optind是否小于argc,这意味着有一个额外的参数(您的文件名) 。像这样:

/* after the while-loop */
if(optind < argc){
    fileName = argv[optind];
    optind++;
}else{
    perror("No file specified");
    return -1;
}

getopt完成后,optind指向argv中未由getopt处理的第一个条目。