Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3154769
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: C/C++

2015-12-17 14:27:15

原文地址:POSIX与GNU的getopt规范 作者:mystérieux


Unix/Linux系统函数库中的getopt是对命令行参数(argument)进行处理的程序。
首先,先明确 argument 与 parameter 这两个概念。这两个词在汉语里我们统统叫作“参数”,我注意到在外国人那里,这两个词也有混用的情况,但从主流上来看,它们之间还是有一定的区别,argument指命令行参数,而parameter指函数里的参数(包括实参或者形参),例如,main函数里的argc和argv就是两个parameter,这个argv就是argument的缩写,它是一个包含所有命令行参数的字符串数组(包括程序名字),argc是这些argv的数量。

POSIX规范:
以一个横杠开头的为选项。
如果不带参数的话,多个选项可以写在一个横杠后面。如-abc与-a -b -c的含义相同。
选项名是单字符的英文字母或者数字。
某些选项是带参数的。
选项和它的参数既可以分开写也可以在一起,grep选项中的 -A 10 与 -A10都是合乎规范的。
选项参数写在非选项参数之前。
如果一个参数只是两个横杠--,那么它会结束所有的选项,所有跟在它后面的参数都被视作非选项,即使它们前面有一个横杠。
一个单横杠-被解释为普通的非选项参数,通常它用来表示对标准输入和输出流的输入或者输出。
选项之间可以是任意顺序,也可多次出现,由程序负责对此进行解释。

GNU规范:
GNU C library对于getopt的实现也遵循了选项参数写在非选项参数之前这一原则,但用户在实际使用中,对选项和非选项可以灵活放置,是因为getopt在程序中把用户输入argv数组进行重新排序,使选项参数在前,非选项参数在后。这种作法是非标准的,可以设置_POSIX_OPTION_ORDER环境变量来禁止它。
GNU增加了长选项的规范,长选项由--开始,后面跟英文字母、数字或单横杠组成的字符串,选项名字的长度一般是一个到三个单词,由横杠隔开,有时候这些长选项有其对应的缩写型短选项。带参数的长选项的形式是--name=value。GNU系统在shell中为长选项提供了补全功能。

调用getopt函数的方式是:
#include
getopt函数中的整形变量optind,是程序把命令行参数重新排序之后为找出来的所有选项作的索引,通过argc 与 optind的比较,我们可以把非选项
找出来:
      while (optind < argc)                                                                                               
        printf ("%s ", argv[optind++]);
阅读(1254) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~