Linux下使用getopt简化命令行参数处理(getoptlinux)
Getopt是Linux类Unix系统上的一种命令行参数处理函数,用于收集命令行参数和分离参数表中的选项和参数。它使程序员能够简单快速地编写参数处理程序,并且更容易理解,因而有利于理解程序的用户组。
由于getopt可增强程序的可读性,使用getopt进行命令行参数处理现已成为Unix系统标准技术。Getopt有两个比较常用的变体。Linux中有C库函数getopt()及其变量optarg和optind。
getopt()是getopt函数,用于处理参数和选项,它将传递给程序的命令行参数分解为选项短名称,参数短名称和其余非选项参数。getopt()函数的格式如下:
getopt(int argc,char * const argv[],const char * optstring)
参数argc及argv就是main()函数里的第2、3个参数,optstring是指定选项字符串。选项字符串的每个字符表示一个可选的选项。如果选项后接参数,则在选项字符后面添加冒号,如“abc:d:e”。
调用getopt()函数后,该函数会从argv数组中看想参数下标改变到optind。如果没有出错,optind会跳过选项,每次getopt()函数被调用后,optind都会自动加1,直到到达参数个数。optarg是提供给getopt()函数,用来返回选项对应参数的字符串指针。
下面是一个简单的示例,它展示了getopt在开发Linux命令行应用程序时的常用用法:
#include
#include
#include
#include
int main(int argc,char *argv[])
{
int options;
char *filename;
while((options = getopt(argc, argv, “f:”)) != -1){
switch(options){
case ‘f’: filename=optarg; break;
default: break;
}
}
//在这里可以使用filename变量
printf(“The filename is: %s\n”, filename);
return 0;
}
本例中optstring“f:”中的”:”表示f后必须要有参数。执行该程序的命令行示例如下:
./getopt -f test.txt
运行结果:
The filename is: test.txt
从上面的例子可以看出,使用getopt可以很方便地处理命令行参数,而不用写很多过程来完成。它可以明确解释程序的使用方法,并方便使用者理解和使用程序,极大地提高了程序的易用性。