Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > 其他操作系统 > 用getopt()处理命令行多参数
【标  题】:用getopt()处理命令行多参数
【关键字】:getopt
【来  源】:http://blog.chinaunix.net/article.php?articleId=1378&blogId=703

用getopt()处理命令行多参数

Your Ad Here

这是FreeBSD的ManPage,getopt用来处理命令行参数组合问题。

HTH~~


/***************************************************
/*
/*题目:FreeBSD-ManPage-getopt(3)
/*
/*翻译:Patrick
/*
/*时间:2004-8-24
/*
/***************************************************
名字
getopt -- get option character from command line argument list


标准c库 (libc,-lc)

定义
#include

extern char *optarg;
extern int optind;
extern int optopt;
extern int opterr;
extern int optreset;

int
getopt(int argc, char * const *argv, const char *optstring);

描述
这个getopt()函数分析一个命令行参数列argv,并返回下一个已知的选项(option)。如果一个选项在可接受选项串optstring中列出,那么它就是已知的。

这个选项串optstring可以包含下列元素:单个字符,字符后面接一个冒号说明后面跟随一个选项参数。例如,一个选项字符"x"表示选项"-x",选 项字符"x:"表示选项和其参数"-x argument"。一个跟随的参数argument是否引导一个空格与getopt()无关。

在getopt()的返回中,optarg指向选项参数,如果它是anticipated,并且变量optind包含下一个argv参数作为对getopt()下一次调用的索引。变量optopt保存最后一个由getopt()返回的已知的选项。

变量opterr和optind都被初始化为1。变量optind可能在对getopt()的调用前已设成其他值的调用前,为了略去或多或少的argv入口。

为了使用getopt()来处理多组参数,或多次处理单组参数,变量optreset必须在每一个对getopt()附加的调用前设置成1,并且变量optind必须已被初始化。

当参数列已经到尾时getopt()函数返回-1,或者返回'?'当遇到一个未知的选项。参数列中选项的解释可能会被'--'取消,由于它引起 getopt()给参数处理发送结束信号并返回-1。当所有的选项都被处理后(比如一直到第一个非选项参数),getopt()返回-1。

诊断
如果getopt()函数遇到一个在optstring中没有的字符或检测到一个缺选项的参数,它会向stderr中写一个错误信息并返回'?'。将 opterr置0可以使它不向stderr中写错误信息。如果optstring以':'开头,那么一个却选项的参数会使':'返回除 suppressing之外的任何错误信息。

选项参数允许使用"-"开头;这是合理的,但可能减少错误检测的总数。

扩展
变量optreset的增加使多次调用getopt()函数成为可能。这是IEEE 1003.2(POSIX.2)规范的扩展部分。

举例
int bflag, ch, fd;

bflag = 0;
while ((ch = getopt(argc, argv, "bf:")) != -1)
switch (ch) {
case 'b':
bflag = 1;
break;
case 'f':
if ((fd = open(optarg, O_RDONLY, 0)) < 0)
err(1, "%s", optarg);
break;
case '?':
default:
usage();
}
argc -= optind;
argv += optind;

历史
getopt()函数首次出现于4.3BSD。

BUGS
getopt()函数曾经返回EOF代替-1。这在IEEE 1003.2-1992(POSIX.2)中被改回来了。

一个单破折号"-" 可能在optstring被定义成一个字符,可能永远不会有参数联合使用它。这允许getopt()在程序中使用"-"作为参数标志。这种习惯是错的,并 且不会被用在任何当前的开发中。这只是为了向后兼容。默认的,一个单破折号"-"使getopt()返回-1。这个和System V兼容。

还可能处理数字作为选项字符情况。这允许getopt()在程序中使用数字("-3")作为参数。这种习惯是错的,并且不会被用在任何当前的开发中。只是提供向后兼容。下面的这段代码在很多情况下(不是所有)工作。

int length;
char *p, *ep;

while ((ch = getopt(argc, argv, "0123456789")) != -1)
switch (ch) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
p = argv[optind - 1];
if (p[0] == '-' && p[1] == ch && !p[2])
length = strtol(++p, &ep, 10);
else if (argv[optind] && argv[optind][1] == ch) {
length = strtol((p = argv[optind] + 1),
&ep, 10);
optind++;
optreset = 1;
} else
usage();
if (*ep != ' ')
errx(EX_USAGE, "illegal number -- %s", p);
break;
}

FreeBSD 4.10 April 27, 1995 FreeBSD 4.10

/******************The End***********************
*NIX下远程连接X Server 几个方法:【上一篇】
manpage-iptables中文版:【下一篇】
【相关文章】
  • 一个使用getopt()函数获取命令行参数的例子
  • 【随机文章】
  • asp.net关于分页上的数据删除问题
  • 终于解决了odac的报错"Can't find ConnectForm.dcu"
  • 在eclipse中的工作路径和类路径
  • 编写的一个10进制转二进制字符串的函数
  • 作业成本软件:如何评价与选择
  • 解决workshop开发的服务器端与axis开发的客户端之间的交互通信问题
  • 中文问题的分类及其建议最优解决办法
  • NetScreen204(中高端应用)
  • 一个javabean轻松实现对数据库的各种操作
  • FreeBSD SNP 安全连接
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.