博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getopt_long及其使用
阅读量:5334 次
发布时间:2019-06-15

本文共 1671 字,大约阅读时间需要 5 分钟。

 Linux系统下,需要大量的命令行选项,如果自己手动解析他们的话实在是有违软件复用的思想,不过还好,GNU C library留给我们一个解析命令行的接口(X/Open规范),好好使用它可以使你的程序改观不少。

使用getopt_long()需要引入头文件

#include <getopt.h>

     现在我们使用一个例子来说明它的使用。

一个应用程序需要如下的短选项和长选项。

      短选项               长选项                           作用

      -h                      --help                           输出程序命令行参数说明然后退出

      -o filename        --output filename      给定输出文件名
      -v                      --version                       显示程序当前版本后退后

为了使用getopt_long函数,我们需要先确定两个结构:

1.一个字符串,包括所需要的短选项字符,如果选项后有参数,字符后加一个":"符号。本例中,这个字符串应该为"ho:v"。(因为-o后面有参数filename,所以字符后面要加":")

2.一个包含长选项字符串的结构体数组,每一个结构体包含4个域,第一个域为长选项字符串,第二个域是一个标识,只能为0或1,分别代表没有、有。第三个域永远为NULL。第四个域为对应的短选项字符串。结构体数组的最后一个元素全部为NULL和0,标识结束。在本例中,它应该像一下的样子:

     const struct option long_options[] = {

         { "help",        0, NULL, 'h' },
         { "output",      1, NULL, 'o' },
         { "version", 0, NULL, 'v' },
         { NULL,          0, NULL, 0}
      };

调用时需要把main的两个参数argc和argv以及上述两个数据结构传给getopt_long

每次调用getopt_long,它会解析一个符号,返回相应的短选项字符,如果解析完毕返回-1。所以需要使用一个循环来处理所有的参数,而相应的循环里会使用switch语句进行选择。如果getopt_long遇到一个无效的选项字符,它会打印一个错误消息并且返回'?',很多程序会打印出帮助信息并且中止运行;当getopt_long解析到一个长选项并且发现后面没有参数则返回':',表示缺乏参数。当处理一个参数时,全局变量optarg指向下一个要处理的变量。当getopt_long处理完所有的选项后,全局变量optind指向第一个未知的选项索引。

这一个例子代码为下:

 

//编译使用gcc -o getopt_long getopt_long.c

#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>

/*程序的名字*/

const char* program_name;

/* 打印程序参数 */

void print_usage (FILE* stream, int exit_code)
{
fprintf (stream, "Usage: %s options [ inputfile ... ]\n", program_name);
fprintf (stream, " -h --help                       显示这个帮助信息.\n"
                             " -o --output filename 将输出定位到文件.\n"
                             " -v --version                  打印版本信息.\n");
exit (exit_code);
}

/* 主程序 */
int main (int argc, char* argv[])
{
int next_option;//下一个要处理的参数符号
int haveargv = 0;//是否有我们要的正确参数,一个标识
           
/* 包含短选项字符的字符串,注意这里的‘:’ */
          
const char* const short_options = "ho:v

转载于:https://www.cnblogs.com/elect-fans/archive/2011/12/06/2408731.html

你可能感兴趣的文章
JAVA 之 GC 二
查看>>
less
查看>>
深度学习激活函数们
查看>>
极其平凡的一天——3.19
查看>>
12306购票
查看>>
[笔记] 走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的
查看>>
HMTL—表单
查看>>
QuickHit游戏
查看>>
字符串中数字,字母,空格等的数量统计
查看>>
C#OOP之四 深入理解方法
查看>>
Python生成器
查看>>
几个常用的小shell
查看>>
swiper3d横向滚动多张炫酷切换banner
查看>>
微信小程序 scroll-view 实现锚点跳转
查看>>
jenkins 构建到最后报权限的问题
查看>>
Node中怎么保持MySql一直连接不断开
查看>>
修正下载链接的树莓派Flash教程(前置:Chromium浏览器)
查看>>
iso网络模型
查看>>
P1265 公路修建 洛谷
查看>>
开博第一篇
查看>>