【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一下了。以后有空再补充 。