首页 > 代码库 > getopt
getopt
int getopt(int argc, char * const argv[], const char *optstring);
1.getopt() 用来解析命令行参数。程序启动时,argc,argv两个参数传递给运行程序,argv里的参数项以‘-‘(或‘--‘)开始。循环调用getopt(),将会返回每一个参数项。
2.optind 指定argv中被处理的参数索引,初始化为1.
3.如果getopt()找到一个参数字符,返回字符,并更新optind变量和nextchar 静态变量,这样下次调用getopt()可以继续搜寻剩下的参数项。
4.如果没有找到参数项字符,getopt()返回-1.此时optind指向argv第一个元素,并不是真正的参数项。
5.optstring指定合法的选项字符。
1)单个字符,表示选项,例如"-d"。
2)单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg,例如“-d12”或者“-d 12”。
3)单个字符后跟两个冒号,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩张),譬如 ”-d12“。
6.getopt()解析到无法识别的选项,将会输出错误信息到终端,返回‘?’。
manual:http://man7.org/linux/man-pages/man3/getopt.3.html
#include "stdio.h"#include <unistd.h>void usage(){ printf("use: ./probe -i 232 -t 300 -u \"http://www.baidu.com\" -s 1 -p1\n"); printf("\t -i _probe_id \n"); printf("\t -t _probe_time(time:s) \n"); printf("\t -u _probe_url\n"); printf("\t -p _probe_type(HLS live:1 vod:2)\n"); printf("\t -s _probe_strategy(MediaRate high:1 low:2 dynamic:3)\n"); printf("\t -h help \n");}int main(int argc, char *argv[]){ int opt; while((opt = getopt(argc, argv, "?hvt:u:i:s:p::" )) != -1) { switch(opt) { case ‘v‘: printf("probe-v0.0.1\n"); exit(0); break; case ‘h‘: usage(); exit(0); break; case ‘t‘: printf("_probe_time = %d\n", atoi(optarg)); break; case ‘i‘: printf("_probe_id = %d\n", atoi(optarg)); break; case ‘u‘: printf("_probe_url = %s\n", optarg); break; case ‘s‘: printf("_probe_strategy = %d \n", atoi(optarg)); break; case ‘p‘: printf("_probe_type = %d\n", atoi(optarg)); break; default: usage(); exit(0); } } return 0;}
Test:
[root@localhost test]# ./opt -i 232 -t 1 -u "http://www.baidu.com" -s -p1_probe_id = 232_probe_time = 1_probe_url = http://www.baidu.com_probe_strategy = 0 [root@localhost test]# ./opt -vprobe-v0.0.1[root@localhost test]# ./opt -d./opt: invalid option -- duse: ./probe -i 232 -t 300 -u "http://www.baidu.com" -s 1 -p1 -i _probe_id -t _probe_time(time:s) -u _probe_url -p _probe_type(HLS live:1 vod:2) -s _probe_strategy(MediaRate high:1 low:2 dynamic:3) -h help [root@localhost test]#
getopt
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。