Linux操作系统的程序命令行处理分析

GNU/Linux命令行习惯

几乎所有的GNU/Linux程序都遵循一些同样的命令行解释习惯,程序的参数通常分为了两大类:选项(option)或者一些标志(flag)、其他参数。选项(option)主要是提供给程序一些运行上的选择,而其他参数则通常是提供给程序运行的输入之类的值。按照习惯,选项通常有两种表达形式:

短形式:通常是由一个“-”加上一个字母组合而成。这种形式的好处是输入快捷。

长形式:通常是由两个“-”加上一个单词组合而成。这种形式的好处是形象、好记、直观。

通常来说,一个程序读于这两种形式都支持。例如大多数的程序都有这样的调用选项:“-h”和“――help”。一些选项需要知道后面跟着的参数,例如“ls –s /”,这里其中的“/”就是一个参数。

使用getopt_long函数来处理

对于一个命令行的分析处理是很单调乏味的工作,需要做大量的诸如字符串的匹配之类的操作,不过幸运的是,GNU C函数库 里面提供了一个函数能够使得这项工作变得容易得多。当然也许仍然没有你想象的那么容易。getopt_long这个函数就能够同时“理解”长形式和短形式的参数。

下面我们通过一个实例来学习这个函数的使用。

假设我们要编写的一个程序需要处理以下几个参数:

短形式 长形式 含义 -h ――help 打印帮助信息 -s ――server 服务器IP地址 -b ――background 后台执行  

要使用getopt_long()这个函数,我们需要提供两个数据结构,第一个是一个字符串,该字符串中的每个字符来表示短形式的选项,如果某个选项后面需要跟一个参数,那么就需要在这个字符后面加上一个“:”(冒号),例如“hs:b”就是我们这个例子中的结构。为了定义长形式表达的选项,我们需要定一个结构体数组。数组的每一项与一个长形式的参数相关,每项包括四个参数:通常来说,第一项是长形式的选项的字符串表达;第二项与后面是否有参数提取有关,如果后面有参数需要处理就是1,否则是0;第三项是NULL;最后一项则是与长形式相关联的短形式表达的字符。另外,这个数组的最后一项必须全部置为0。

根据上面的说明,对于我们的例子,可以得到下面的一个数组:

const struct option long_options [] =={ {“help ”,0,NULL,‘h ’ }}, {“server ”,1,NULL,‘s ’ }}, {“background”,0,NULL,‘b ’ }}, {NULL,0,NULL,0 } };  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22e52ca28a9c987bf23abe177f594f71.html