命令行参数解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
命令行参数解析

命令行参数解析: getopt()与getopt_long() Linux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与其他程序或用户进行交互的主要手段。具有可靠的复杂命令行参数处理 机制,会使得您的应用程序更好、更有用。不过很多开发人员都将其宝贵的时间花在了编写自己的命令行解析器,却不使用 getopt(),而后者是一个专门设计来减轻命令行处理负担的库函数。 1、命令行参数 命令行程序设计的首要任务是解析命令行参数,GUI派的程序员很少关心这个。这里,我们对参数(argument)采用了一种比较通俗的定义:命令行上除命令名之外的字符串。参数由多项构成,项与项之间用空白符彼此隔开。 参数进一步分为选项和操作数。选项用于修改程序的默认行为或为程序提供信息,比较老的约定是以短划线开头。选项后可以跟随一些参数,称为选项参数。剩下的就是操作数了。 2、 POSIX约定POSIX表示可移植操作系统接口:Portable Operating System Interface,电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。然而,POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC OpenVMS 和 Microsoft Windows NT,都支持 POSIX 标准。 下面是POSIX标准中关于程序名、参数的约定: 程序名不宜少于2个字符且不多于9个字符; 程序名应只包含小写字母和阿拉伯数字; 选项名应该是单字符活单数字,且以短横‘-‘为前綴; 多个不需要选项参数的选项,可以合并。(譬如:foo -a -b -c ----foo -abc) 选项与其参数之间用空白符隔开; 选项参数不可选。 若选项参数有多值,要将其并为一个字串传进来。譬如:myprog -u arnold,joe,jane。这种情况下,需要自己解决这些参数的分离问题。 选项应该在操作数出现之前出现。 特殊参数‘--指明所有参数都结束了,其后任何参数都认为是操作数。 选项如何排列没有什么关系,但对互相排斥的选项,如果一个选项的操作结果覆盖其他选项的操作结果时,最后一个选项起作用;如果选项重复,则顺序处理。 允许操作数的顺序影响程序行为,但需要作文档说明。 读写指定文件的程序应该将单个参数-作为有意义的标准输入或输出来对待。 当然许多标准从恒许未遵守以上约定,主要是历史兼容问题,因为标准出现之前,就已经存在N多程序了。 3、GNU长选项 GNU鼓励程序员使用--help、--verbose等形式的长选项。这些选项不仅不与POSIX约定冲突,而且容易记忆,另外也提供了在所有GNU工具之间保持一致性的机会。GNU长选项有自己的约定: 对于已经遵循POSIX约定的GNU程序,每个短选项都有一个对应的长选项。 额外针对GNU的长选项不需要对应的短选项,仅仅推荐要有。 长选项可以缩写成保持惟一性的最短的字串。 选项参数与长选项之间或通过空白字符活通过一个=来分隔。 选项参数是可选的(只对短选项有效)。 长选项允许以一个短横线为前缀。 4、基本的命令行处理技术 C程序通过argc和argv参数访问它的命令行参数。argc是整型数,表示参数的个数(包括命令名)。main()函数的定义方式有两种,区别仅在于argv如何定义:int main(int argc, char *argv[]) { …… } int main(int argc, char **argv) { …… } 当 C 运行时库的程序启动代码调用您的 main() 时,已经对命令行进行了处理。argc 参数包含参数的计数值,而 argv 包含指向这些参数的指针数组。argv[0]是程序名。 一个很简单的命令行处理技术的例子是echo程序,它可以将参数输出到标准设备上,用空格符隔开,最后换行。若命令行第一个参数为-n,那么就不会换行。 清单1:#include stdio.h int main(int argc, char **argv) { int i, nflg; nflg = 0; if(argc 1 argv[1][0] == - argv[1][1] == n){ nflg++; argc--; argv++; } for(i=1; iargc; i++){ fputs(argv[i], stdout); if(i argc-1) putchar( ); } if(nflg ==

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档