http://www.kernel.org/doc/man-pages/online/pages/man3/getopt.3.html
#include <unistd.h>
int getopt(int argc, char * const argv[],
const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
#include <getopt.h>
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);
getopt(): _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE
getopt_long(), getopt_long_only(): _GNU_SOURCE
getopt 用于解析命令行参数,如 -a -t -s0 等等
optstring中后面的冒号表示需要接变量,并存于optarg中。如果接二个冒号,则表示变量可有可无。
扫描模式:
1. 如果第一个字符为加号: 停止于发现第一个非选项
2. 如果第一个字符为减号:全部扫描;此为默认模式。
碰到'--',则忽略扫描模式,必须停止扫描。
返回值:
成功,返回option;
结束,返回-1;
发现不认识的option,返回?号
碰到option后面缺参数,则返回?号。
或返回:号(optstring中第一个字符(如果有加减号,在加减号后面)为冒号时返回,即为:或+:或-:)。
optarg 存数据
optind,
opterr 控制是否向STDERR打印错误。为0,则关闭打印。
optopt 存储出错的option(如缺参数),或者不认识的option
摘自openssh的用法示例:
while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q12346S:o:F:")) != -1)
switch (ch) {
case '3':
throughlocal = 1;
break;
case 'o':
addargs(&args, "-%c", ch);
addargs(&args, "%s", optarg);
break;
default:
usage();
}
argc -= optind;
argv += optind;