我在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);
}
}
答案 0 :(得分:4)
getoptlong()
正在完成它应该做的事情。
"d:g:hv"
表示参数d
和g
需要一个值。 您应该将程序作为
运行$program --download file --version
查看此detailed example,了解使用getoptlong()
的各个方面。
rm
如何处理其cmd-line params的不同位置?
显然是因为rm
的参数(r
,v
等)不接受任何值作为参数。因此directory
不会传递给它们中的任何一个,而是自己单独的cmd-line参数。您可以从source-code of rm确认。
要为您的计划执行类似操作,您需要将 optstring 修改为"dghv"
并单独处理参数"file"
。