- 论坛徽章:
- 0
|
C语言程序由main开始运行,一般main的声明如下:
int main(int argc,char *argv[])
argc是参数个数,argv是代表参数自身的字符串数组。
argv[0]是运行的程序名,后面以此是各个输入的参数,以输入时的空格为界。
例如:./file a b c,因此argv[0]是file,argv[1]是a,argv[2]是b。
getopt函数能帮助我们很好的操纵程序参数。
例程:
#include stdio.h>
#include unistd.h>
int main(int argc,char *argv[]){
int opt;
while((opt = getopt(argc,argv,"if:lr")) != -1){
switch(opt) {
case 'i':
case 'l':
case 'r':
printf("option: %c\n",opt);
break;
case 'f':
printf("filename: %s\n",optarg);
break;
case ':':
printf("option %c needs a value\n",opt);
break;
case '?':
printf("unknown option: %c\n",optopt);
break;
}
}
for(; optind argc; optind++)
printf("argument: %s\n",argv[optind]);
return 0;
}
输入./opt -i -lr 'hi there' -f opt.c -q
输出:
option: i
option: l
option: r
filename: opt.c
./opt: invalid option -- q
unknown option: q
argument: hi there
int getopt(int argc,char *const argv[],const char *optstring);
前两个参数就是传进main的argc和argv,地三个参数告诉getopt哪些选项可用,哪些选项后要有关联值。如上面的if:lr,表示可选项有iflr,并且f后面有关联值,一个选项后跟一个冒号表示该选项后面有关联值。
应用这个函数要需要知道4个变量:
extern char *optarg
extern int optind,opterr,optopt
optarg里保存选项的关联值,
optind表示下一个待处理参数的索引,每次调用getopt都会返回下一个选项字符,知道最后返回-1。
optopt当有个无法识别的选项时,就保存在此
opterr如果非0,getopt就会向stderr打印出错的信息。
当所有选项都被getopt读取完毕后,optind会指向argv中不是optstring中列出的选项的位置。
argv经过getopt后,顺序会发生改变,如该例子:
本来的argv数组的依次是 ./opt -i -lr 'hi there' -f opt.c -q
经过改变后数组的顺序是 ./opt -i -lr -f opt.c -q 'hi there'
可以看出getopt会先把输入中的选项值依次排列,如果f后必须跟关联值,则该关联值跟在选项后,如opt.c是跟在f后面的,但是其他非选项的值放在数组最后,即使q不是需要的选项。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/62515/showart_491608.html |
|