C程序解析命令行参数

getopt.h 文件中包含了处理程序命令行参数的函数, 可以减轻处理argv 的负担.

一般, main函数的调用方式是 int main(int argc, char *argv[]) 或者  int main(int argc, char **argv).

agrc 指示函数参数个数, 包括程序名; agrv[] 则存储各个参数, 其中argv[0]是函数名.

参考:http://www.jb51.net/article/41462.htm

int getopt_long(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx)

函数说明
getopt被用来解析命令行选项参数。

getopt_long支持长选项的命令行解析,函数中的参数argc和argv通常直接从main()的两个参数传递而来。optstring是选项参数组成的字符串。

字符串optstring可以是下列元素: 
1. 单个字符,表示选项, 

2. 单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。 

3. 单个字符后跟两个冒号,表示该选项后可以有参数也可以没有参数。如果有参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(这个特性是GNU的扩展)。
optstring是一个字符串,表示可以接受的参数。例如,"a:b:cd",表示可以接受的参数是a,b,c,d,其中,a和b参数后面跟有更多的参数值。(例如:-a host --b name)。

 

说明:  

 

例如在命令行执命令:  ./myprog -p profile1 -r 115200

要在myprog.c中对命令行参数进行解析:

 

#include <getopt.h>
static char g_profile[256] = {0};
static char g_file[256] = {0};
static int g_speed;
static int g_fctrl;
static char g_parity;


static struct option longopts[] = {
	{"help", no_argument, NULL, 'h'},
	{KEY_LOG_LEVEL, required_argument, NULL, 'v'},
	{"file", required_argument, NULL, 'f'},
	{"profile", required_argument, NULL, 'p'},
	{"baudrate", required_argument, NULL, 'r'},
	{"flow_ctrl", required_argument, NULL, 'c'},
	{"parity", required_argument, NULL, 'j'},
	{0, 0, 0, 0},
};


int main(int argc, char **argv){
	ret = parse_arg(argc, argv);	
}
static int parse_arg(int argc, char **argv, AVDictionary **dict)
{
	int ret = 0;
	char c = '0';

	while (
		(c = getopt_long(argc, argv, "-:v:f:p:r:c:j:h", longopts, NULL))
		!= -1) {
		switch (c) {
		case 'v':
			av_dict_set(dict, KEY_LOG_LEVEL, optarg, 0);
			break;
		case 'f':
			snprintf(g_file, sizeof(g_file), "%s", optarg);
			break;
		case 'p':
			snprintf(g_profile, sizeof(g_profile), "%s", optarg);
			break;
		case 'r':
			g_speed = atoi(optarg);
			break;
		case 'c':
			g_fctrl = atoi(optarg);
			break;
		case 'j':
			g_parity = optarg[0];
			break;
		case 'h':
			ret = -1;
			break;
		case ':':
			fprintf(stdout, "%c require argument\n", optopt);
			ret = -1;
			break;
		case '?':
			fprintf(stdout, "%c invalid argument\n", optopt);
			ret = -1;
			break;
		default:
			break;
		}
	}

	return ret;
}

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值