您的位置:首页 > 运维架构

获取命令行参数,getopt

2016-01-14 15:58 302 查看
函数头文件: 

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息