vtun如何解析启动客户端或服务器的命令行参数?
Usage:
Server:
vtund <-s> [-f file] [-P port] [-L local address]
Client:
vtund [-f file] [-p] [-m] [-t timeout] <host profile> <server address>
预备知识:
-s –f –P 等称为选项;
file port称为选项对应的参数;
host file server address ——暂且称它们为非选项字符串吧。
解析代码在main.c中。
在vtun源码中是这样实现的:
1 | if(!svr) usage(); hst = argv[optind++]; //argv[optind++]指的是第一个非选项字符串host或者server,可以理解为本次会话的名称。 if( !(host = find_host(hst)) ) vtun.svr_name = strdup(argv[optind]); //上面optind加1了,所以此处的argv[optind]指的是profile或address.
void usage(void) |
为充分理解getopt和argc,argv的关系,再看一个例子
1 | root@ubuntu:~/eclipseworkspace# ./a.out -b barg ee ff */ |