使用系统调用getopt简化对命令行参数的解析

原创 2006年06月11日 21:17:00
有关系统调用getopt:
声明:
        #include <unistd.h>
        int getopt(int argc, char *const argv[], const char *optstring);

        extern char *optarg;
        extern int optind, opterr, optopt;

使用方法:在while循环中反复调用,直到它返回-1。每当找到一个有效的选项字母,它就返回这个字母。如果选项有参数,就设置optarg指向这个参数。
当程序运行时,getopt()函数会设置控制错误处理的几个变量:
char *optarg ──如果选项接受参数的话,那么optarg就是选项参数。
int optind──argv的当前索引,当while循环结束的时候,剩下的操作数在argv[optind]到argv[argc-1]中能找到。
int opterr──当这个变量非零(默认非零)的时候,getopt()函数为"无效选项”和“缺少选项参数”这两种错误情况输出它自己的错误消息。可以在调用getopt()之前设置opterr为0,强制getopt()在发现错误时不输出任何消息。
int optopt──当发现无效选项的进修,getopt()函数或者返回'?'字符,或者返回字符':'字符,并且optopt包含了所发现的无效选项字符。

例子:
/* getopttest.c ── 练习系统调用getopt()的用法,为实现shell内置命令getopts和各个命令的命令行参数解析做准备 */
#include <stdio.h>
#include <unistd.h>
// 程序接受两个参数:-a -b ,其中-b选项必需带一个参数(整数)
int main(int argc, char *argv[])
{
        int oc;
        char * b_opt_arg;

        while((oc = getopt(argc, argv, "ab:")) != -1)
        {
                switch(oc)
                {
                case 'a':
                        printf("have option -a/n");
                        break;
                case 'b':
                        b_opt_arg = optarg;
                        int count = atoi(b_opt_arg);
                        // 输出count个have option b, arg is `count`
                        int i = 0;
                        for (i = 0; i < count; i++)
                                printf("have option -b, arg is %s/n", b_opt_arg);;
                        break;
                case ':':
                        // 缺少选项参数
                        fprintf(stderr, "%s: option '-%c' is invalid: ignored/n", argv[0], optopt);
                        break;
                case '?':
                default:
                        // 无效选项
                        fprintf(stderr, "%s: option '-%c' is invalid: ignored/n", argv[0], optopt);
                        break;
                }
        }
}
编译、运行 :

[ 本帖最后由 verge 于 2006-5-14 11:57 PM 编辑 ]

图片附件: getopt.jpg (16.1 K)

 

C/C++—— 分析命令行参数的getopt()函数使用介绍

getopt函数获取并分析命令行参数
  • Linux_ever
  • Linux_ever
  • 2016年03月31日 18:07
  • 1960

c语言getopt解析命令行参数实例包括长参数与短参数

#include #include #include void get_option(int argc, char **argv) { char *cmd = argv[0]; ...
  • zhaoyong26
  • zhaoyong26
  • 2017年01月16日 15:20
  • 865

Python命令行参数解析:getopt和argparse

一 Python的参数传递 在Python中命令行参数通过sys.argv传递,它的类型是一个list类型,其中的元素为字符串。 # -*-coding:GBK-*- # !python.exe # ...
  • lanzheng_1113
  • lanzheng_1113
  • 2017年08月25日 17:09
  • 235

Linux程序设计——用getopt处理命令行参数

  Linux程序设计——用getopt处理命令行参数 [ 2006-11-...
  • xjtuse_mal
  • xjtuse_mal
  • 2007年05月17日 23:11
  • 1461

使用getopt解析命令行参数

感觉getopt比ConfigParser更简单。下面是getopt的解析方法 import os, sys, getoptdef test(): args = sys.argv[1:] ...
  • zhaoweikid
  • zhaoweikid
  • 2010年01月29日 13:53
  • 1731

Linux c 开发 - 命令行参数和getopt方法的使用细节

命令行参数 在c语言的入口函数main方法中,可以添加两个参数:argc和argv。通过这两个参数,我们就可以在可执行文件执行的时候将自定义的参数传递到程序中。 看一个例子: #include ...
  • initphp
  • initphp
  • 2015年03月10日 21:52
  • 2232

命令行参数解析函数getopt_long() 使用详解

当一个用C语言编写的Linux或UNIX程序运行时,它是从main函数开始的。对这些程序而言,main函数的声明如下所示:int main(int argc, char *argv[])其中argc是...
  • feglass
  • feglass
  • 2016年05月21日 09:13
  • 1293

linux shell命令行选项与参数用法详解--getopt

本文介绍了linux shell中使用命令行选项与命令行参数的方法,在bash中,可以用以下三种方式来处理命令 行参数,每种方式都有自己的应用场景 问题描述:在linux shell中如何处理...
  • cbbbc
  • cbbbc
  • 2015年02月01日 22:57
  • 6109

用getopt解析命令行参数

用过gcc的都知道gcc有许多参数。例如要将hello.c译成hello.exe并加上调试信息,用gcc hello.c -g -o hello.exe即可。现在分析gcc的参数。对于这个例子,参数可...
  • ccbird88
  • ccbird88
  • 2010年11月19日 21:16
  • 459

PHP 命令行参数解析工具类

  • u012302539
  • u012302539
  • 2017年03月14日 16:43
  • 1448
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用系统调用getopt简化对命令行参数的解析
举报原因:
原因补充:

(最多只允许输入30个字)