1.设置某个IP的mac
-
a. 单个字符,表示选项
-
b. 单个字符后接一个冒号,表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
-
c. 单个字符后跟两个冒号,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩张)。
b: "b:" --> ./getopt -b argB -->必须带一个参数,且与参数之间需要有空格
c: "c::" --> ./getopt -cargC -->必须带一个参数,且与参数之间不能有空格
2.
-
cong@msi:/work/test/tcpip/busy/getopt$ cat getopt.c
-
#include "utils.h"
-
-
int main(int argc, char **argv)
-
{
-
int ret;
-
-
while( (ret = getopt(argc, argv, "ab:c::d::")) != -1 )
-
{
-
switch(ret)
-
{
-
case 'a':
-
dbmsg("A: optarg=%s", optarg);
-
break;
-
case 'b':
-
dbmsg("B: optarg=%s", optarg);
-
break;
-
case 'c':
-
dbmsg("C: optarg=%s", optarg);
-
break;
-
case 'd':
-
dbmsg("D: optarg=%s", optarg);
-
break;
-
default:
-
dbmsg("default, ret=%c",ret);
-
break;
-
}
-
dbmsg("optind=%d,argv[%d]=%s",optind, optind, argv[optind]);
-
}
-
dbmsg("end while: optind=%d", optind);
-
-
dbmsg("not processed args:----->");
-
for(ret = optind; ret < argc; ret++)
-
dbmsg("argv[%d]=%s", ret, argv[ret]);
-
-
dbmsg("print all args:-------->");
-
for(ret=1; ret<argc; ret++)
-
dbmsg("argv[%d]=%s", ret, argv[ret]);
-
return 0;
-
}
执行结果
-
cong@msi:/work/test/tcpip/busy/getopt$ ./getopt -a argA -b argB -cargC -d argD argE
-
getopt.c:main[12]: A: optarg=(null) //"ab:c::d::"中a是没有参数的,所以这儿的optarg是NULL
-
getopt.c:main[27]: optind=2,argv[2]=argA //处理完参数a后,optind指向argA
-
getopt.c:main[15]: B: optarg=argB //"ab:c::d::"中b带参数,所以这儿的optarg是argB
-
getopt.c:main[27]: optind=5,argv[5]=-cargC //处理完参数b后,optind指向-cargC
-
getopt.c:main[18]: C: optarg=argC //"ab:c::d::"中c带参数且参数与-c之间不能有空格,所以c的参数是argC
-
getopt.c:main[27]: optind=6,argv[6]=-d //处理完参数c后,optind指向-d
-
getopt.c:main[21]: D: optarg=(null) //"ab:c::d::"中d带参数且参数与-d之间不能有空格,但没有这样的参数,所以d的参数是NULL
-
getopt.c:main[27]: optind=7,argv[7]=argD //处理完参数d后,optind指向argD
-
getopt.c:main[29]: end while: optind=6
-
-
getopt.c:main[31]: not processed args:-----> //打印一下没有处理的参数
-
getopt.c:main[33]: argv[6]=argA
-
getopt.c:main[33]: argv[7]=argD
-
getopt.c:main[33]: argv[8]=argE
-
-
getopt.c:main[35]: print all args:--------> //将getopt后,所有的参数都打印出来发现getopt打参数重新排列了
-
getopt.c:main[37]: argv[1]=-a
-
getopt.c:main[37]: argv[2]=-b
-
getopt.c:main[37]: argv[3]=argB
-
getopt.c:main[37]: argv[4]=-cargC
-
getopt.c:main[37]: argv[5]=-d
-
getopt.c:main[37]: argv[6]=argA
-
getopt.c:main[37]: argv[7]=argD
-
getopt.c:main[37]: argv[8]=argE
3.
getopt.rar (下载后改名为getopt.tar.gz)
阅读(1247) | 评论(0) | 转发(0) |