命令行参数解析精粹
1. C语言版用到getopt_long这个函数, 代码如下:
/******************************************************************************
* \File
* main.c
* \Brief
*
* \Author
* Hank
* \Created date
* 2013-03-12
******************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
extern char *optarg;
extern int opterr;
struct option opts[] = {
{"ip", required_argument, NULL, 'i'},
{"port", required_argument, NULL, 'p'},
{"host", required_argument, NULL, 's'},
{"out" , required_argument, NULL, 'o'},
{"help", required_argument, NULL, 'h'},
{0,0,0,0}
};
int parse_params(int argc, char** argv, char* ip, int* port, char* host, char* f);
int main(int argc, char* argv[])
{
char ip[32] = "225.1.1.31";
int port = 1234;
char host[32] = "127.0.0.1";
char filename[512] = "udp.dat";
/*Parsing command-line parameters */
parse_params(argc, argv, ip, &port, host, filename);
return 0;
}
int parse_params(int argc, char** argv,
char* ip, int* port, char* host, char* f)
{
int c, index;
opterr = 0;
while ((c = getopt_long(argc, argv, "i:p:s:o:h", opts, NULL)) != -1)
{
switch (c)
{
case 'i':
strcpy(ip, optarg);
break;
case 'p':
*port = atoi(optarg);
break;
case 's':
strcpy(host, optarg);
break;
case 'o':
strcpy(f, optarg);
break;
case 'h':
default:
printf("Usage: \n");
printf("-i ip : set udp's ip address\n");
printf("-p port : set udp's port\n");
printf("-s host : set local addresss\n");
printf("-o file : set output filename\n");
printf("-h : print help information\n");
return 1;
}
}
/* show banner */
printf("ip : %s \nport : %d \nhost : %s \nfile : %s\n",
ip, *port, host, f);
for (index = optind; index < argc; index++)
printf("Non-option argument %s\n", argv[index]);
return 0;
}
2. Perl语言版
使用Getopt::Long模块:
http://search.cpan.org/~jv/Getopt-Long-2.39/lib/Getopt/Long.pm
代码如下:
#!/usr/bin/perl
##############################################################################
# \File
# parseing_args.pl
# \Brief
#
# \Author
# Hank
# \Created date
# 2013-03-14
##############################################################################
use Getopt::Long;
my ($params, $key, $verbose, $help);
my $argc = $#ARGV; # 输入参数的个数
my $result = GetOptions("params|p=s" => \$params,
"key|k=i" => \$key,
"verbose" => \$verbose,
"help" => \$help);
if($help == 1 || $argc == -1)
{
print "Usage:\n";
print "./parsing_args.pl -
补充:软件开发 , C语言 ,
上一个:杭电2008
下一个:c语言之不再害怕sizeof(struct)
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊