免费注册 查看新帖 |

Chinaunix

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

[C] 请教命令行处理带参数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-22 21:30 |只看该作者 |倒序浏览
本帖最后由 285230769 于 2010-08-22 21:32 编辑

想实现功能:./test -f log1234 -c 3 -t 2   (f : logfie写入日志信息的文件 ,  c : count 执行的次数,  -t  time执行时间)
如下面这样子写好像就没有办法获取到  -c  -t 的值了,该如何写呢?   谢谢!
  1. void print_usage(void)
  2. {
  3.         fprintf(stderr, "Usage:\n");
  4.         fprintf(stderr, "\t-f: filename of log file. (eg, -f <logname>)\n");
  5.         fprintf(stderr, "\t-c: count number. (eg, -c <countnumber>)\n");
  6.         fprintf(stderr, "\t-t: time.(eg, -t <time>)\n");
  7. }
  8. char *parse_options(int argc, char **argv, unsigned int *c)
  9. {
  10.         int sel;
  11.         char *filename;
  12.         char *count;
  13.         char *time;

  14.         *c = 0;
  15.         filename = NULL;
  16.         while((sel = getopt(argc, argv, "c:t:f:")) != -1){
  17.                 switch(sel){
  18.                         case 'f':
  19.                                 filename = optarg; break;                               
  20.                         case 'c':
  21.                                 mobileversion = atoi(optarg); break;
  22.                         case 't':
  23.                                 baseversion = atoi(optarg); break;                       
  24.                         default:
  25.                                 fprintf(stderr,"Wrong options.\n");
  26.                                 print_usage();
  27.                                 exit(1);
  28.                 }
  29.         }
  30.         return filename;
  31. }
  32. int main(int argc, char **argv)
  33. {
  34.         unsigned int choice;
  35.         char *logfile;

  36.         logfile = parse_options(argc, argv, &choice);

  37.         return 0;
  38. }
复制代码

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2010-08-22 22:17 |只看该作者
有空格,就是两个参数了

论坛徽章:
0
3 [报告]
发表于 2010-08-22 22:22 |只看该作者
回复 2# hellioncu
可否稍微详细点,没明白你的意思:wink:

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2010-08-22 22:56 |只看该作者
回复  hellioncu
可否稍微详细点,没明白你的意思
285230769 发表于 2010-08-22 22:22



    -c 3因为之间有空格,当作两个参数的,要取得3,就用取-c位置的下一个argv

论坛徽章:
0
5 [报告]
发表于 2010-08-22 23:18 |只看该作者
我记得是有专门的函数来处理长短形式的命令行参数的...

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
6 [报告]
发表于 2010-08-22 23:59 |只看该作者
求解析命令行参数的库!

论坛徽章:
0
7 [报告]
发表于 2010-08-23 13:37 |只看该作者
-c 3因为之间有空格,当作两个参数的,要取得3,就用取-c位置的下一个argv
hellioncu 发表于 2010-08-22 22:56



    正解,谢谢大家。


另,#include <unistd.h>  使用getopt引用的是这个库,不知道你是否问的是这个问题。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2010-08-23 13:45 |只看该作者

论坛徽章:
0
9 [报告]
发表于 2010-08-23 14:02 |只看该作者
这个很容易吧

论坛徽章:
0
10 [报告]
发表于 2010-08-23 14:31 |只看该作者
参见本人大作
flw 发表于 2010-08-23 13:45



    拜读一下老大的佳作
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP