获取命令行参数,getopt

  • 函数头文件: 

#include

  • 函数原型:

int getopt(int argc,char * const argv[ ],const char * optstring);

  • 函数说明:

该函数用来解析命令行参数,其中第一,二参数分别为main函数中的argc和argv,

参数optstring则为将要处理的字符串选项,如"a:b:cd",代表着 -a xx,-b xx ,-c xx ,-d xx选项,

其中xx代表传入的参数argv。

  • 短参数定义 
参数optstring所指的字串作为短参数列表,象"1ac:d::"就是一个短参数列表。
短参数的定义是一个'-' 后面跟一个字母或数字,象-a, -b就是一个短参数。
每个数字或字母定义一个参数。 
  其中短参数在getopt定义里分为三种:
  1. 不带值的参数,它的定义即是参数本身。
  2. 必须带值的参数,它的定义是在参数本身后面再加一个冒号。
  3. 可选值的参数,它的定义是在参数本身后面加两个冒号 。
  在这里拿上面的"1ac:d::"作为样例进行说明,其中的1,a就是不带值的参数,
c是必须带值的参数,d是可选 值的参数。
  在实际调用中,'-1 -a -c cvalue -d', '-1 -a -c cvalue -ddvalue', '-1a -ddvalue -c cvalue'
都是合法的。这里需要注意三点:
  1. 不带值的参数可以连写,象1和a是不带值的参数,它们可以-1 -a分开写,也可以-1a或-a1连写。
  2. 参数不分先后顺序,'-1a -c cvalue -ddvalue'和'-d -c cvalue -a1'的解析结果是一样的。
  3. 要注意可选值的参数的值与参数之间不能有空格,必须写成-ddvalue这样的格式,如果写成
-d dvalue这样的格式就会解析错误。

代码getopt.c如下
编译:
gcc getopt.c -o opt
运行:
./opt -d 127.0.0.1 -p 123456
#include
#include
#include

int main(int argc,char *argv[])
{
	int ch;
	char ip[16];
	int port;
	char *p = NULL;
	while((ch = getopt(argc,argv,"d:p:")) != -1)
	{
		switch(ch)
		{
			case 'd':			
				strcpy(ip,argv[2]);			
				printf("ip====[%s]\n",ip);
				continue;
			case 'p':
				port = strtoul(argv[4],&p,10);
				printf("port===[%d]\n",port);
				break;
			default:
				printf("err,please use:-d -p!\n");
				break;	
		}

	}
	printf("err!\n");

	return 0;
}


你可能感兴趣的:(linux,C)