getopt_long() 参数详解

【blog.csdn.net/lanmanck】

原型为:int getopt_long(int argc, char * const argv[],

                  const char *optstring,
                  const struct option *longopts, int *longindex);

其中 argc argv[]就不讲了,是main()的原参数。

讲下optstring和logopts,例如ti的例程中有如下定义:

const Char shortOptions[] = "a:s:v:y:O:kt:lfohd:"; /* optstring,後面加':'表示該參數在使用時,後面需給設定值 */
const struct option longOptions[] = {
	/* name 	has_arg			flag	val */
        {"audiofile",        required_argument, NULL, 'a'}, /* 指向长选项名称(带两个短横线)的指针 */
        {"speechfile",       required_argument, NULL, 's'},
        {"videofile",        required_argument, NULL, 'v'},
        {"display_standard", required_argument, NULL, 'y'},
        {"display_output",   required_argument, NULL, 'O'},
        {"keyboard",         no_argument,       NULL, 'k'},
        {"time",             required_argument, NULL, 't'},
        {"loop",             no_argument,       NULL, 'l'},
        {"osd",              no_argument,       NULL, 'o'},
        {"help",             no_argument,       NULL, 'h'},
        {"exit",             no_argument,       NULL, 'e'},
	{"daemonver",        required_argument, NULL, 'd'},
        {0, 0, 0, 0}
    };

什么意思呢?这2个数组分别表示短/长参数的含义,这样getopt_long就知道怎么解析,具体一点:

-a 和 --audiofile是一个意思,但可以不同时指定,没有指定那getopt_long就找不到呗,没什么大不了。

另外shortOptions[]里面的冒号是什么意思?

例如上面的a:s:v:kt:,咦,为什么k后面就没有冒号了?可以跟t连在一起?

是这样的,如果该字母后面有冒号,表示该字母后面有所带的参数,例如我们输入-a myfile.h264 -k,这样我们在碰到-a时,就可以使用optarg得到myfile.h264了。而-k没有参数,我们碰到-k时自己处理一下即可。

还有个index,大家man一下了。以后有空再补充 。

你可能感兴趣的:(getopt_long() 参数详解)