如何编写支持命令行选项的程序

Linux下的程序,经常支持N多的命令行选项。那么,我们如何编写支持命令行选项的程序呢。

下面给出两个示例。

示例1,简单的命令行选项。

下面的程序,支持4个选项, -i,-n,-s,-d

编译后,可以这样执行 (选项之间的顺序无所谓):

./a.out   -i  -n 100  -s hahaha  -d

好了,下面是代码。

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

int enable_opt_i;

int enable_opt_d;

int int_para_n;

char *str_para_s;

void parse_args(int argc, char *argv[])

{

int opt;

while ((opt = getopt(argc, argv, "iIn:s:d")) != -1)

{

switch (opt)

{

case ‘i‘:

case ‘I‘:

enable_opt_i = 1;

break;

case ‘n‘:

int_para_n = atoi(optarg);

break;

case ‘s‘:

str_para_s = optarg;

break;

case ‘d‘:

enable_opt_d = 1;

break;

default: /* ‘?‘ */

printf("Usage: %s [-<i/I>] [-n number] [-s string] [-d]\n",

argv[0]);

}

}

}

int main(int argc, char *argv[])

{

parse_args(argc, argv);

printf("enable_opt_i = %d\n",enable_opt_i);

printf("enable_opt_d = %d\n",enable_opt_d);

printf("int_para_n   = %d\n",int_para_n  );

printf("str_para_s   = %s\n",str_para_s  );

return 0;

}

示例二,长选项(同时混合了简单选项)。

下面的程序,支持7个选项, -i,-n,-s,-d,--opt_a, --opt_b,--opt_c

编译后,可以这样执行 (选项之间的顺序无所谓):

./a.out   -i  -n 100  -s hahaha  -d  --opt_a   --opt_b=95555  --opt_c=cmbbank

好了,下面是代码。

#define _GNU_SOURCE

#include <stdio.h>

#include <unistd.h>

#include <getopt.h>

#include <stdlib.h>

int enable_opt_i;

int enable_opt_d;

int int_para_n;

char *str_para_s;

#define    LONG_OPT_A_ID    (1000)

#define    LONG_OPT_B_ID    (1001)

#define    LONG_OPT_C_ID    (1002)

int enable_long_opt_a;

int long_int_para_b;

char *long_str_para_c;

struct option my_options[] =

{

{"opt_a",  no_argument,       NULL, LONG_OPT_A_ID},

{"opt_b",  required_argument, NULL, LONG_OPT_B_ID},

{"opt_c",  required_argument, NULL, LONG_OPT_C_ID},

{0},

};

void parse_args(int argc, char *argv[])

{

int opt;

while ((opt = getopt_long(argc, argv, "iIn:s:d", my_options, NULL)) != -1)

{

switch (opt)

{

case ‘i‘:

case ‘I‘:

enable_opt_i = 1;

break;

case ‘n‘:

int_para_n = atoi(optarg);

break;

case ‘s‘:

str_para_s = optarg;

break;

case ‘d‘:

enable_opt_d = 1;

break;

case LONG_OPT_A_ID:

enable_long_opt_a = 1;

break;

case LONG_OPT_B_ID:

long_int_para_b = atoi(optarg);

break;

case LONG_OPT_C_ID:

long_str_para_c = optarg;

break;

default: /* ‘?‘ */

printf("Usage: %s [-<i/I>] [-n number] [-s string] [-d] [--opt_a] [--opt_b=number] [--opt_c=string]\n",

argv[0]);

}

}

}

int main(int argc, char *argv[])

{

parse_args(argc, argv);

printf("enable_opt_i = %d\n",enable_opt_i);

printf("enable_opt_d = %d\n",enable_opt_d);

printf("int_para_n   = %d\n",int_para_n  );

printf("str_para_s   = %s\n",str_para_s  );

printf("enable_long_opt_a = %d\n",enable_long_opt_a);

printf("long_int_para_b   = %d\n",long_int_para_b  );

printf("long_str_para_c   = %s\n",long_str_para_c  );

return 0;

}

时间: 2024-10-09 07:27:32

如何编写支持命令行选项的程序的相关文章

怎样编写支持命令行选项的程序

Linux下的程序,常常支持N多的命令行选项.那么,我们怎样编写支持命令行选项的程序呢. 以下给出两个演示样例. 演示样例1,简单的命令行选项. 以下的程序,支持4个选项, -i,-n,-s,-d 编译后,能够这样运行 (选项之间的顺序无所谓): ./a.out   -i  -n 100  -s hahaha  -d 好了,以下是代码. #include <stdio.h> #include <unistd.h> #include <stdlib.h> int enab

Python getopt模块处理命令行选项实例教程

分享下Python getopt模块处理命令行选项的一些例子. 在python编程中,getopt模块与shell中的getopt参数模块一样灵活而实用. getopt模块用于抽出命令行选项和参数,也就是sys.argv 命令行选项使得程序的参数更加灵活.支持短选项模式和长选项模式例如 python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b' import getopt, sys shortargs

optparse 模块—— 命令行选项的解析器

15.5 optparse 模块--  命令行选项的解析器 注意:从2.7版本后不再使用:optparse模块不推荐使用,python不再更新该模块,后续的发展将推荐使用argparse模块. 支持python2.3及以上版本 optparse模块比旧的getopt模块具有更方便.更灵活.功能更强大的解析命令行选项的库.optparse使用一种更加声明式的命令行解析风格:你创建一个OptionParser实例,填充选项,并解析命令行.optparse允许用户指定选项,使用传统的GNU/POSIX

命令行选项解析函数(C语言):getopt()和getopt_long()

上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的.于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序.在百度和 man 的帮助下,找到了具体使用方法和解释,二话不说赶紧学习一下,并总结出文档记录一下. 平时在写程序时常常需要对命令行参数进行处理,因为参数少,自己解析就可以搞定:如果命令行个数比较多时,如果按照顺序一个一个定

详解Top命令 输出命令行选项及代码

Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服务器的负载.在本篇中,我们会探索top命令的细节.top命令是一个交互命令.在运行top的时候还可以运行很多命令.我们也会探索这些命令. (译注:不同发行版的top命令在各种细节有不同,如果发现不同时,请读你的帮助手册和命令内的帮助.) 1. Top 命令输出 首先,让我们了解一下输出.top命令会显示系统的很多信息.我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出: 前几行水平

命令行选项解析相关知识点

最近读源码的时候碰到命令行解析相关的知识点,比较模糊.摘取出来做个记录 1.最基本的main函数头 main(int argc,char *argv[ ]) 如果只输入程序名xxx,则argc=1,argv[0]指向输入的程序路径及名称./xxx;如果输入xxx para_1(程序名加一个参数),则argc=2,argv[0] 指向输入的程序路径及名称,argv[0]指向参数para_1字符串.以此类推,也就是char  *argv[]:argv 是一个指针数组,其元素个数是argc,存放的是指

python argparse模块解析命令行选项简单使用

argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argparse.ArgumentParser(prog="myprogram ",description="a test of argparse") parser.add_argument("-a",type=int,dest="start"

安装loadrunner时出现”命令行选项语法错误键入命令 \?获得帮助“的解决方法

安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入"命令/?"可获取帮肋信息1.进入loadrunner-11\Additional Components\IDE Add-Ins\MS Visual Studio .NET 2.安装:LRVS2005IDEAddInSetup.exe 2.再安装loadrunner

argparse - 命令行选项与参数解析

argparse模块作为optparse的一个替代被添加到Python2.7.argparse的实现支持一些不易于添加到optparse以及要求向后不兼容API变化的特性,因此以一个新模块添加到标准库. 与optparse相比较 argparse的API类似于optparse,甚至在很多情况下通过更新所使用的类名和方法名,使用argparse作为一个简单的替代.然而,有些地方在添加新特性时不能保持直接兼容性. 你必须视情况决定是否升级已有的程序.如果你已编写了额外的代码以弥补optparse的局