Linux程序设计——用getop()处理命令行参数.doc

Linux程序设计——用getop()处理命令行参数.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux程序设计——用getop()处理命令行参数

Linux程序设计——用getop()处理命令行参数 Nov 21, 2010 Duy/ISIP Keywords : 命令行 getopt() 在阅读Rob Hess的sift实现代码的时候看到getopt()函数,遂加以了解。网络上有很多关于此函数的介绍,基本的概念就不在此详细论述了,本文主要总结GNU getopt()的一些点。Ubuntu下gcc遵循GNU getopt()。 在Linux下, 使用Gcc等编译运行程序时,为了便于控制程序,修改程序中的变量的默认值,加强程序员和程序间的交互等,需要从命令行中输入一些参数。 main(int argc, char** argv)函数中,argc统计命令行参数的个数,argv指向这些参数,参数一般是以字符或字符串的形式存在的。getopt()函数就是对命令行输入进行处理的函数。为了便于理解,我把命令行输入参数分为三种:选项,选项参数,非选项操作数。 getopt()选项以-开始,为单个字符,后面可以跟选项参数,一些和选项无关的输入为非选项参数。  getopt()函数声明如下:  #include unistd.h  int getopt(int argc, char * const argv[], const char *optstring);  extern char *optarg;  extern int optind, opterr, optopt;   optarg,optind, opterr, optopt为四个全局变量。optstring定义选项字串。 GNU提供的getopt()函数的主要特点是: 1)扫描方式 它的扫描方式是扫描整个命令行来寻找选项和选项参数,扫描结束后getopt()函数返回-1。如果遇到--则无条件终止扫描。 在扫描的过程中getopt()使用全局变量optind作为argv的索引,相当于数组的下标。optind的初始值一般为1,即指向argv[1]。这是因为一般argv[0]为程序的名字,不可能是选项,所以从argv[1]开始扫描寻找选项。当然扫描前把optind设为0也没有问题,设为其他非0非1值也是可以的,但是这时候将从argv[optind]开始扫描,不会扫描到整个命令行,同时optind应该介于[0 argc-1]之间,否则会造成argv[]越界,可能引发段错误等。 设optind初始值为1,扫描整个命令行。getopt()找到一个选项后,将会修改optind的值,使其指向下一个可能的选项。修改方式是:optind = 当前选项索引+1或者2。当选项没有选项参数时候 +1, 有选项参数的时候 +2,即要越过当前选项及其选各项参数,使optind指向下一个可能的选项。 在这个扫描的过程中,除第一次调用getopt()函数外,其余次调用还进行了一种操作:重排agrv[]内容,即将当前选项及其选项参数移动到所有非选项操作数的前面,也就是将所有非选项操作数移动到当前选项及其选项操作数的后面。这样当扫描结束后,argv[]中的内容被重新排列了,依次顺序为程序名称+选项及其选项参数+非选项操作数;optind被修改为指向第一个非选项操作数,这样argv[0]存储程序名称,argv[1]到argv[optind-1]存储选项及其选项参数, argv[optind]到argv[argc-1]存储非选项操作数;选项及其选项参数和非选项操作数的存储自身内部的存储顺序为输入顺序。 2)返回值及optarg指向 每次调用getopt()函数将会返回一个值,这个值一般为一个选项,如果输入了没有定义的选项,即选项无效,或者选项缺少选项参数,返回值可能是:或者?,依设计而不同。如果一个选项有选项参数,那么optarg将指向这个参数,如果没有optarg为NULL; 3)命令行错误控制。 不正确的调用程序在所难免,这种错误有两种类型,要么是选项无效,要么是选项缺少选项参数。正常情况下,getopt()会为这两种情况输出自己的出错信息,并且返回?。 如果选项无效,设为g,错误信息为 : 程序名称: invalid option -- g 如果缺少选项参数,设选项为g,错误信息为 : 程序名称:option requires an argument -- g  如果不希望输出任何错误信息,或更希望输出自定义的错误信息。可以采用以下两种方法来更改getopt()函数的出错信息输出行为: 在调用getopt()之前,将opterr设为0,这样就可以在getopt()函数发现错误的时候强制它不输出任何消息,返回值保持不变,为?。这样就可以人为控制错误输出信息,这时将不会区分错误类型。  如果o

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档