Linux程序设计——用getop()处理命令行参数.doc_第1页
Linux程序设计——用getop()处理命令行参数.doc_第2页
Linux程序设计——用getop()处理命令行参数.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论