getopt函数只能处理短选项,而getopt_long函数两者都可以,可以说getopt_long已经包含了getopt_long的功能。
#include <unistd.h> extern char *optarg; extern int optind, opterr, optopt; #include <getopt.h> int getopt(int argc, char * const argv[],const char *optstring); int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex); int getopt_long_only(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);1、argc和argv和main函数的两个参数一致。 2、optstring: 表示短选项字符串。
形式如“a:b::cd:“,分别表示程序支持的命令行短选项有-a、-b、-c、-d,冒号含义如下: (1)只有一个字符,不带冒号——只表示选项, 如-c (2)一个字符,后接一个冒号——表示选项后面带一个参数,如-a 100 (3)一个字符,后接两个冒号——表示选项后面带一个可选参数,即参数可有可无, 如果带参数,则选项与参数直接不能有空格 形式应该如-b2003、longopts:表示长选项结构体。结构如下:
struct option { const char *name; int has_arg; int *flag; int val; }; eg: static struct option longOpts[] = { { “daemon”, no_argument, NULL, D }, { “dir”, required_argument, NULL, d }, { “out”, required_argument, NULL, o }, { “log”, required_argument, NULL, l }, { “split”, required_argument, NULL, s }, { “http-proxy”, required_argument, &lopt, 1 }, { “http-user”, required_argument, &lopt, 2 }, { “http-passwd”, required_argument, &lopt, 3 }, { “http-proxy-user”, required_argument, &lopt, 4 }, { “http-proxy-passwd”, required_argument, &lopt, 5 }, { “http-auth-scheme”, required_argument, &lopt, 6 }, { “version”, no_argument, NULL, v }, { “help”, no_argument, NULL, h }, { 0, 0, 0, 0 } };<
使用如下:
#define APP_VERSION “(” __DATE__ ” ” __TIME__ “)” static int init_param(int argc, char** argv) { int opt = 0; while ((opt = getopt(argc, argv, “va”)) != -1) { switch (opt) { case v: printf(“%d\n”,SOURCE_VERSION); // printf(APP_VERSION); exit(0); case a: printf(“%s\n”,SOFTVERSION); // printf(APP_VERSION); // printf(“\n”); exit(0); default: break; } } return 0; }免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:getopt_long函数 https://www.yhzz.com.cn/a/14241.html