设为首页 加入收藏

TOP

C 语言getopt与go语言flag获取命令参数
2017-08-09 10:22:38 】 浏览:5454
Tags:语言 getopt flag 获取 命令 参数
    C语言中的getopt()函数为命令参数的获取提供了很大便利,与golang中的flag功能类似。
 下面以ssh中获取主机名/ip和用户名为例来示例如何使用getopt(). 
 int get_user_host(int ac, char **av, char *host, char *user){ char *p, *cp; extern int optind; int opt; again: while ((opt = getopt(ac, av, "1246AaCfgKkMNnqsTtVvXxYyb:c:D:e:F:I:i:L:l:m:O:o:p:R:S:W:w:")) != -1){ switch (opt){ case '1': break; case '2': break; case '4': break; case '6': break; case 'A': break; case 'a': break; case 'C': break; case 'f': break; case 'g': break; case 'K': break; case 'k': break; case 'M': break; case 'N': break; case 'n': break; case 'q': break; case 's': break; case 'T': break; case 't': break; case 'V': break; case 'v': break; case 'X': break; case 'x': break; case 'Y': break; case 'y': break; case 'b': break; case 'c': break; case 'D': break; case 'e': break; case 'F': break; case 'I': break; case 'i': break; case 'L': break; case 'l': break; case 'm': break; case 'O': break; case 'o': break; case 'p': break; case 'R': break; case 'S': break; case 'W': break; case 'w': break; default: return -3; } } ac -= optind; av += optind; if (ac > 0 && strlen(host)==0 && **av != '-') { if (strrchr(*av, '@')) { p = strdup(*av); cp = strchr(p, '@'); if (cp == NULL || cp == p){ printf("can not find username nearby @"); printf("\n"); return -1;; } *cp = '\0'; user = strcpy(user, p); host = strcpy(host,++cp); } else{ host = strcpy(host, *av); } if (ac >1 ){ optind = 1; goto again; } ac--, av++; } if (strlen(host)==0){ printf("can not find host address in parameters"); printf("\n"); return -2; } return 0; } 

go语言flag

 go的flag相比于c的getopt使用起来简单很多。 
cfgPath := flag.String("c","/etc/cfg.toml","cfg path") nowaitFlag :=flag.Bool("w",false,"do not wait")

函数中第一个命令是”-c”、”-w”中的指示词,第二个为默认值,第三个为说明。无论顺序,主要正常出现就能解析。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C库头文件(C99) 下一篇C_线性表(ADT)-单向循环链表的表..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目