免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1564 | 回复: 6
打印 上一主题 下一主题

关于getopt [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-16 09:35 |只看该作者 |倒序浏览
如何用getopt 获得这样的结果:ngrep port 5060

论坛徽章:
0
2 [报告]
发表于 2004-11-16 10:06 |只看该作者

关于getopt


  1.        ......      
  2.        printf("usage: %s [-p port]\n",argv[0]);
  3.       ......
  4.       while((c=getopt(args,&argv[1],"p:"))!=-1){
  5.       switch(c){

  6.        case 'p': port=atoi(optarg);break;
  7.        ......
  8.    
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-11-16 10:12 |只看该作者

关于getopt

你这问题描述的太简洁,以至偶看不懂

论坛徽章:
0
4 [报告]
发表于 2004-11-16 10:22 |只看该作者

关于getopt

[quote]原帖由 "albcamus"]你这问题描述的太简洁,以至偶看不懂[/quote 发表:


getopt得到的一般都是型如:<-s>;,<-h>; 或者<-s expression>;
怎样才能得到不带‘-’的参数呢?

开始我表达不清楚,抱歉。

论坛徽章:
0
5 [报告]
发表于 2004-11-16 11:15 |只看该作者

关于getopt

如果要那样的话,估计应该对每个argv的第一个字符做检查,看是不是‘-’,如果不是,就想办法给它插入一个,只是,只是……在字符串的首位置插入字符,在C中要怎么做啊?

论坛徽章:
0
6 [报告]
发表于 2004-11-16 11:44 |只看该作者

关于getopt

  1.       4 #include <unistd.h>;
  2.       5 #include <string.h>;
  3.       6 #include <stdio.h>;
  4.       7 #include <stdlib.h>;
  5.       8 int main(int argc,char** argv)
  6.       9 {
  7.      10         if(argc!=2)
  8.      11         {
  9.      12                 printf("I need a single option,maybe followed         tightly by its parameter. \n");
  10.      13                 exit(1);
  11.      14         }
  12.      15
  13.      16         int t;
  14.      17         for (t=0; t<argc; t++)
  15.      18                 printf("argv[%d] is %s\n",t,argv[t]);
  16.      19
  17.      20         //adjusting....如果某个参数向量的首字符不是‘-’,
  18.      21         //动态申请,插入‘-’。
  19.      22         int i;
  20.      23         char *s[argc];
  21.      24         s[0] = argv[0];
  22.      25         for (i=1; i<argc ; i++)
  23.      26         {
  24.      27                 if( argv[i][0]!='-')
  25.      28                 {
  26.      29                 s[i] = malloc(strlen(argv[i])+1);
  27.      30                 s[i][0] = '-';
  28.      31                 strcpy(&s[i][1],argv[i]);
  29.      32                 }
  30.      33                 else
  31.      34                 {
  32.      35                 s[i] = malloc( strlen(argv[i])+1 );
  33.      36                 strcpy (s[i],argv[i]);
  34.      37         //      strcat(s[i],"\0");
  35.      38                 }
  36.      39
  37.      40         }
  38.      41
  39.      42
  40.      43         printf("After adjusting ,argvs are:\n");
  41.      44         int j;
  42.      45         for ( j=0; j<argc; j++)
  43.      46                 printf("s[%d] is %s\n",j,s[j]);
  44.      47
  45.      48         int ch;
  46.      49         opterr = 0;//to disable error message
  47.      50         ch = getopt(argc,s,"a:bcde");//注意第二个参数
  48.      51         printf("%c\n",ch);
  49.      52         //这里只判断了一种情况
  50.      53         if(ch=='a')
  51.      54                 printf("%s\n",optarg);
  52.      55
  53.      56         int f;
  54.      57         for(f = 0;f<argc;f++)
  55.      58                 free (s[f]);
  56.      59
  57.      60         return 0;
  58.      61 }
复制代码


只判断了一种情况,如果规范的写的话,应该写成fwizard那样的swith语句。
感觉笨拙得很,朋友们肯定有好办法,盼由以教我~~

论坛徽章:
0
7 [报告]
发表于 2004-11-16 15:22 |只看该作者

关于getopt

谢谢 albcamus!
我可以借鉴一下(希望不要有盗版之嫌:P)。

你的要运行的话是这样的 ./test abcdfg
参数只能是一个字符。
我现在想把参数设置成一个单词以便好懂. 如: ngrep port 5060

我可以这样获得参数:

  1. while ((from = *argv++)) {
  2.         while ((*to++ = *from++));
  3.         *(to-1) = ' ';
  4.     }
复制代码


但是不知道如何用getopt函数来实现
希望朋友有以教我
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP