原:http://blog.csdn.net/songqqnew/article/details/7006541
man 3 getopt
NAME
getopt, getopt_long, getopt_long_only - Parse command-line options
#include <unistd.h>
int getopt(int argc, char * const argv[],
const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
#define _GNU_SOURCE
The getopt() function parses the command-line arguments. Its arguments argc and argv are the argument count and array as
passed to the main() function on program invocation. An element of argv that starts with ’-’ (and is not exactly "-" or
"--") is an option element. The characters of this element (aside from the initial ’-’) are option characters. If
getopt() is called repeatedly, it returns successively each of the option characters from each of the option elements.
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- int
- main(int argc, char *argv[])
- {
- int opt;
- char* short_options="nt:";
- while ((opt = getopt(argc, argv,short_options)) != -1) {
- switch (opt) {
- case 'n':
- printf("option n\n");
- break;
- case 't':
- printf("option t,optarg=%s\n",optarg);
- printf("str to int:%d\n",atoi(optarg));
- break;
- default:
- fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",argv[0]);
- }
- }
- exit(EXIT_SUCCESS);
- }
- [root@localhost test]# ./test1 -t 66 -n
- option t,optarg=66
- str to int:66
- option n
********************************************************************
getopt_long的原型是int getopt_long(int argc, char * const argv[],
const char *optstring,const struct option *longopts,
int *longindex);
The getopt_long() function works like getopt() except that it also accepts long options, started with two dashes. (If the
program accepts only long options, then optstring should be specified as an empty string (""), not NULL.) Long option
names may be abbreviated if the abbreviation is unique or is an exact match for some defined option. A long option may
take a parameter, of the form --arg=param or --arg param.
longopts is a pointer to the first element of an array of struct option declared in <getopt.h> as
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
The meanings of the different fields are:
name is the name of the long option.
has_arg
is: no_argument (or 0) if the option does not take an argument; required_argument (or 1) if the option requires an
argument; or optional_argument (or 2) if the option takes an optional argument.
flag specifies how results are returned for a long option. If flag is NULL, then getopt_long() returns val. (For exam-
ple, the calling program may set val to the equivalent short option character.) Otherwise, getopt_long() returns 0,
and flag points to a variable which is set to val if the option is found, but left unchanged if the option is not
found.
val is the value to return, or to load into the variable pointed to by flag.
The last element of the array has to be filled with zeroes.
If longindex is not NULL, it points to a variable which is set to the index of the long option relative to longopts.
getopt_long_only() is like getopt_long(), but ’-’ as well as ’--’ can indicate a long option. If an option that starts
with ’-’ (not ’--’) doesn’t match a long option, but does match a short option, it is parsed as a short option instead.
getopt_long例子参考
http://blog.csdn.net/ast_224/article/details/3861625