- 函数头文件:
#include<unistd.h>
- 函数原型:
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<stdio.h>
#include<unistd.h>
#include<stdlib.h>
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;
}