影响输出的命令中命令行选项的不同顺序

时间:2013-08-31 03:38:18

标签: c getopt-long

我在c中创建一个接受命令行参数的程序,如--version, - download。

当我这样做时:

$program --version --download file

程序输出版本并下载文件。但是当我这样做时:

$program --download --version file

程序认为--version--download的参数。

我使用getopt_long()函数来解析命令行参数。这是我的代码片段:

while ((ch = getopt_long(argc, argv, "d:g:hv", longoptions, &optindex)) != -1 )
{
    switch(ch)
    {
            case 'd' :
                if ( optarg )
                    printf("Downloading %s...\n" , optarg);
                iso(optarg);
                break ;

            case 'g' :
                if ( optarg )
                    printf("Downloading glug-mirror automation script for %s ...\n", optarg);
                getscript(optarg);
                break ; 

            case 'v' : 
                printf("glug version 1.0.0 ( NIT Hamirpur)\n");
                break ;

            case 'h' :
                usage(status);
                break ;

            default :
                status  = 2 ; 
               usage(status);
    }
}

1 个答案:

答案 0 :(得分:4)

getoptlong() 正在完成它应该做的事情。

  • 格式字符串"d:g:hv"表示参数dg需要一个值。
  • 在命令行参数后面指定的任何内容都会考虑传递给它的值。

您应该将程序作为

运行
$program --download file --version

查看此detailed example,了解使用getoptlong()的各个方面。


  

rm如何处理其cmd-line params的不同位置?

显然是因为rm的参数(rv等)不接受任何值作为参数。因此directory不会传递给它们中的任何一个,而是自己单独的cmd-line参数。您可以从source-code of rm确认。

要为您的计划执行类似操作,您需要将 optstring 修改为"dghv"并单独处理参数"file"