linux c getopt_long & getopt

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

int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);

这两个函数都是linux c对传入参数解析的函数, 使用如下:

在介绍2 个函数之前需要先看几个全局变量如下:

char *optarg;
int optnid,opterr,optopt;

这些全局的变量 也 记录了 处理这些参数的结果。

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

argc: 不用说是需要主函数的参数个数;

argv: 主函数参数列表;

optstring :参数缩写字母列表,如果某项需要带参数就在相应的参数缩写后用:表示;

optarg:对应某个参数的参数内容;

optnid:第n个参数;

opterr:该函数处理正确为0,不正确为 非0;

optopt:传入错误的参数;如果传入参数错误getopt函数会返回 '?' 或者':'  并且将错误的数据放到optopt中;

看个例子

 #include <stdlib.h>

#include <stdio.h>

#include <unistd.h>


int main(int argc ,char** argv)

{


int i=0;


#if 0

for(i=0;i<argc;i++)

{

printf("\nmain the %dth is %s\n",i,argv[i]);

}

#endif

int i_optret = 0;


while((i_optret = getopt(argc,argv,"a:bc"))!= -1)

{

switch(i_optret)

{

case 'a':

printf("\nmmmmmmmmmmm,optarg is %s\n",optarg);

break;

case 'b':

printf("\nmmmmmmmmmmm,optarg is %s\n",optarg);

break;

case 'c':


printf("\ncccccccccccccccccccccccccccccccc\n");

break;

case '?':

case ':':


printf("\nmmmmmmmmmmm,optopt is %d\n",optopt);


break;

default:

break;

}

}

return 0;

 

gcc -o opt test.c

./opt -a testparam1

./opt -b testparam2

./opt -c 

./opt -m

看看运行结果


 




你可能感兴趣的:(getopt_long)