posts - 63, comments - 37, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 ::  :: 管理
getoptUNIX下的命令列程式特别好用,特别是在你有许多参数要加入时。一般来说,你可以透过「man 3 getopt」来获得其说明。这个函数很好用,也很简单,但网上关于这个函数的中文介绍实在是少之又少,这篇文章就简单讲述一下如何利用getopt函数来获取参数,希望能给那些被参数读取弄得有一点点烦躁的朋友有一点点帮助。

1、函数说明

n         表头文件:#i nclude <unistd.h>

n         函数声明:int getopt(int argc, char * const argv[], const char *optstring);

n         函数说明:getopt()用来分析命令行参数。参数argcargv是由main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt设为“?”字符,如果不希望getopt()印出错信息,则只要将全域变量opterr设为0即可。

n         返回值:如果找到符合的参数则返回此参数字母,如果参数不包含在参数optstring 的选项字母则返回“?”字符,分析结束则返回-1

2、例子程序

       下面是一个使用getopt函数读取参数的例子程序,该程序支持–p –s –b –c的参数,并将这些参数值读取后进行打印。你可以根据需要将这些代码稍作修改用于自己的程序中。

/*

 *  getopt.c

 *  Author: Coonxu

 *  email:  coonxu@126.com

 *  这是一个使用getopt函数读取参数的例子程序,该程序支持 -p -s -b -c的参数,

 * 并将这些参数值读取后进行打印。你可以根据需要将这些代码稍作修改用于自己的程序中。

 */

 

 

#i nclude <unistd.h>

#i nclude <stdio.h>

 

int main(int argc, char **argv)

{

    int ch;

    opterr = 0;

    while( ( ch = getopt( argc, argv, "s:b:c:p:" ) ) != EOF )

    {

        switch(ch)

        {

            case 's':

                printf("s opt: %s\n", optarg);

                break;

            case 'b':

                printf("b opt: %s\n", optarg);

                break;

            case 'c':

                printf("c opt: %s\n", optarg);

                break;

            case 'p':

                printf("p opt: %s\n", optarg);

                break;

            case '?':

                printf( "illegal option: %c\n", ch );

                break;

        }      

    }

   

    return 0;

}

只有注册用户登录后才能发表评论。