[c language] getopt

getopt(分析命令行参数) 

相关函数表头文件

#include<unistd.h>
定义函数

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

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

短参数的定义

       getopt()使用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()每次调用会逐次返回命令行传入的参数。

   当没有参数的最后的一次调用时,getopt()将返回-1。

    当解析到一个不在optstring里面的参数,或者一个必选值参数不带值时,返回‘?‘。

   当optstring是以‘:‘开头时,缺值参数的情况下会返回‘:‘,而不是‘?‘ 。

c.c文件

 1 #include <stdio.h>
 2 #include <unistd.h>
 3
 4 int main(int argc, char **argv)
 5 {
 6         int ch;
 7         opterr = 0;
 8         while ((ch = getopt(argc,argv,"a:bcde::f"))!=-1)
 9         {
10                 switch(ch)
11                 {
12                         case ‘a‘:
13                                 printf("option a:‘%s‘\n",optarg);
14                                 break;
15                         case ‘b‘:
16                                 printf("option b :b\n");
17                                 break;
18                         case ‘e‘:
19                                 printf("option e:‘%s‘\n",optarg);
20                                 break;
21                         default:
22                                 printf("other option :%c\n",ch);
23                 }
24         }
25         printf("optopt +%c\n",optopt);
26
27     return 1;
28 }

运行结果:

 1 ~ Home$ ./c -a
 2 other option :?
 3 optopt +a
 4 ~ Home$ ./c -a 123
 5 option a:‘123‘
 6 optopt +a
 7 ~ Home$ ./c -a123
 8 option a:‘123‘
 9 optopt +a
10 ~ Home$ ./c -b
11 option b :b
12 optopt +b
13 ~ Home$ ./c -cde
14 other option :c
15 other option :d
16 other option :?
17 optopt +e
18 ~ Home$ ./c -e
19 other option :?
20 optopt +e
21 ~ Home$ ./c -e123
22 option e:‘123‘
23 optopt +e
24 ~ Home$ ./c -e 456
25 option e:‘456‘
26 optopt +e
27 ~ Home$ ./c -f
28 other option :f
29 optopt +f
30 ~ Home$ ./c -a 123 -bcdf -e 456
31 option a:‘123‘
32 option b :b
33 other option :c
34 other option :d
35 other option :f
36 option e:‘456‘
37 optopt +e

reference:

http://vopit.blog.51cto.com/2400931/440453

[c language] getopt

时间: 2024-11-29 03:07:57

[c language] getopt的相关文章

[c language] getopt 其参数optind 及其main(int argc, char **argv) 参数解释

getopt被用来解析命令行选项参数.#include <unistd.h> extern char *optarg; //选项的参数指针extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项. extern int opterr, //当opterr=0时,getopt不向stderr输出错误信息.extern int optopt; //当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt

使用getopt处理shell脚本的参数

getopt命令并不是bash的内建命令,它是由util-linux包提供的外部命令.相比较bash 的内置命令,getopt不只支持短参-s,还支持--longopt的长参数,甚至支持-longopt的简化参数.getopt可以用于tcsh其它的shell.现在就以系统自带的帮助文件,说说getopt在bash下的使用技巧. #!/bin/bash   # A small example program for using the new getopt(1) program.  # This

【翻译】Android Interface Definition Language (AIDL)

参考地址:https://developer.android.com/guide/components/aidl.html Android Interface Definition Language (AIDL) AIDL (Android Interface Definition Language) is similar to other IDLs you might have worked with. It allows you to define the programming inter

Go语言自述(The Go Programming Language README)

声明:本文为笔者为练习英语所做的翻译练习,原文所属者与笔者没有任何关系,翻译结果不代表原文所属者的观点.笔者不保证翻译的正确性,任何人以任何形式的对本文的引用,都是不负责任和荒谬的行为,造成的后果笔者不予负责. 原文链接所属:golang/go Go is an open source programming language that makes it easy to build simple,reliable, and efficient software. Go是一门开源的编程语言,用它可

Linux下C程序设计(4)----操作环境变量 、程序传递参数getopt getopt_long操作、获取时间

通过命令传递参数查看环境变量  /************************************************************************* > File Name: env.c > Author: > Mail: > Created Time: Tue 24 Feb 2015 10:42:21 PM PST *******************************************************************

C语言getopt

By francis_hao    Jul 5,2017 getopt:分析命令行选项 概述 #include <unistd.h>int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, optopt; 描述 getopt()函数分析命令行参数,它的参数argc和argv就是程序传递给main()函数的参数,一个以'-'(不是仅

Mysql DCL (Date Control Language)

Mysql DCL (Date Control Language) 数据库:mysql> select * from fen; +-------+-------+---------+ | name | china | english | +-------+-------+---------+ | ming | 69 | 99 | | hong | 48 | 33 | | qiang | 77 | 33 | +-------+-------+---------+ 3 rows in set (0.

窝上课不听,how to learn C language easily(1)

C language 学习心得 附:为啥起这么霸气侧漏,招大神们鄙视的标题,正如我在<C language>随笔的介绍中写的,这是一个写个妹纸们看的C language的文章.没错!!写这篇文章的灵感也来自于上周Clanguage课上偶撩到一个连书包都不放下在玩手机的妹子(普通聊天而已,嘘~~~),得知她课后在自学慕课,刚看到数组·····那得有多慢!于是,小子虽不才,但正义感十足,决心写一章超级宇宙无敌简单入门炫酷无敌吊炸天的C language 入门指南. 其实,鄙人大一上受了大神Alex

Visual Format Language

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage.html#//apple_ref/doc/uid/TP40010853-CH27-SW1 Visual Format Language This appendix shows how to use the Auto Layout Visual Format Lan