Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2150575
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: LINUX

2015-06-26 16:17:10

1.设置某个IP的mac
  1. a. 单个字符,表示选项
  2. b. 单个字符后接一个冒号,表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
  3. c. 单个字符后跟两个冒号,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩张)。
b:   "b:"   --> ./getopt -b argB     -->必须带一个参数,且与参数之间需要有空格
c:  "c::"  --> ./getopt -cargC        -->必须带一个参数,且与参数之间不能有空格
2.
  1. cong@msi:/work/test/tcpip/busy/getopt$ cat getopt.c
  2. #include "utils.h"

  3. int main(int argc, char **argv)
  4. {
  5.     int ret;

  6.     while( (ret = getopt(argc, argv, "ab:c::d::")) != -1 )
  7.     {
  8.         switch(ret)
  9.         {
  10.             case 'a':
  11.                 dbmsg("A: optarg=%s", optarg);
  12.                 break;
  13.             case 'b':
  14.                 dbmsg("B: optarg=%s", optarg);
  15.                 break;
  16.             case 'c':
  17.                 dbmsg("C: optarg=%s", optarg);
  18.                 break;
  19.             case 'd':
  20.                 dbmsg("D: optarg=%s", optarg);
  21.                 break;
  22.             default:
  23.                 dbmsg("default, ret=%c",ret);
  24.                 break;
  25.         }
  26.         dbmsg("optind=%d,argv[%d]=%s",optind, optind, argv[optind]);
  27.     }
  28.     dbmsg("end while: optind=%d", optind);

  29.     dbmsg("not processed args:----->");
  30.     for(ret = optind; ret < argc; ret++)
  31.         dbmsg("argv[%d]=%s", ret, argv[ret]);
  32.     
  33.     dbmsg("print all args:-------->");
  34.     for(ret=1; ret<argc; ret++)
  35.         dbmsg("argv[%d]=%s", ret, argv[ret]);
  36.     return 0;
  37. }
执行结果
  1. cong@msi:/work/test/tcpip/busy/getopt$ ./getopt -a argA -b argB -cargC -d argD argE
  2. getopt.c:main[12]: A: optarg=(null)              //"ab:c::d::"中a是没有参数的,所以这儿的optarg是NULL
  3. getopt.c:main[27]: optind=2,argv[2]=argA         //处理完参数a后,optind指向argA
  4. getopt.c:main[15]: B: optarg=argB                //"ab:c::d::"中b带参数,所以这儿的optarg是argB
  5. getopt.c:main[27]: optind=5,argv[5]=-cargC       //处理完参数b后,optind指向-cargC
  6. getopt.c:main[18]: C: optarg=argC                //"ab:c::d::"中c带参数且参数与-c之间不能有空格,所以c的参数是argC
  7. getopt.c:main[27]: optind=6,argv[6]=-d           //处理完参数c后,optind指向-d
  8. getopt.c:main[21]: D: optarg=(null)              //"ab:c::d::"d带参数且参数与-d之间不能有空格,但没有这样的参数,所以d的参数是NULL
  9. getopt.c:main[27]: optind=7,argv[7]=argD         //处理完参数d后,optind指向argD
  10. getopt.c:main[29]: end while: optind=6

  11. getopt.c:main[31]: not processed args:----->      //打印一下没有处理的参数
  12. getopt.c:main[33]: argv[6]=argA
  13. getopt.c:main[33]: argv[7]=argD
  14. getopt.c:main[33]: argv[8]=argE

  15. getopt.c:main[35]: print all args:-------->       //将getopt后,所有的参数都打印出来发现getopt打参数重新排列了
  16. getopt.c:main[37]: argv[1]=-a
  17. getopt.c:main[37]: argv[2]=-b
  18. getopt.c:main[37]: argv[3]=argB
  19. getopt.c:main[37]: argv[4]=-cargC
  20. getopt.c:main[37]: argv[5]=-d
  21. getopt.c:main[37]: argv[6]=argA
  22. getopt.c:main[37]: argv[7]=argD
  23. getopt.c:main[37]: argv[8]=argE
3.
getopt.rar (下载后改名为getopt.tar.gz)
阅读(1247) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~