我需要我的程序从命令行获取几个参数,语法如下:
getpwd -l user1 user2 ... -L -X -S...
所以,我需要让用户支持这个-l
选项。我尝试使用getopt
,但运气不佳,它仅在我将其他选项放在之前才有效-l
:
getpwd -L -X -S ... -l user1 user2 ...
我的代码(用于-l
和-S
):
while((c = getopt(argc, argv, "l:S")) != -1){
switch(c){
case 'l':
index = optind-1;
while(index < argc){
next = strdup(argv[index]); /* get login */
index++;
if(next[0] != '-'){ /* check if optarg is next switch */
login[lcount++] = next;
}
else break;
}
break;
case 'S':
sflag++; /* other option */
break;
case ':': /* error - missing operand */
fprintf(stderr, "Option -%c requires an operand\n", optopt);
break;
case '?': /* error - unknown option */
fprintf(stderr,"Unrecognized option: -%c\n", optopt);
break;
}
}
optopt
并且optind
是extern int
。
所以,问题是:我可以使用getopt()
函数 (or getopt_long()
) 吗?还是我必须编写自己的解析器才能得到我需要的东西?