|
|
|
|
表头文件 |
#include<unistd.h> |
|
定义函数 |
int getopt(int argc,char * const argv[ ],const char * optstring); |
|
函数说明 |
getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt设为“?”字符,如果不希望getopt()印出错信息,则只要将全域变量opterr设为0即可。 |
|
返回值 |
如果找到符合的参数则返回此参数字母,如果参数不包含在参数optstring 的选项字母则返回“?”字符,分析结束则返回-1。 |
|
范例 |
#include<stdio.h> #include<unistd.h> int main(int argc,char **argv) { int ch; opterr = 0; while((ch = getopt(argc,argv,”a:bcde”))!= -1) switch(ch) { case ‘a’: printf(“option a:’%s’\n”,optarg); break; case ‘b’: printf(“option b :b\n”); break; default: printf(“other option :%c\n”,ch); } printf(“optopt +%c\n”,optopt); } |
|
执行 |
$./getopt –b 在java中有时候也要用到命令行参数,而java中就没有这么好的函数可以直接读出选项的参数了。那么java中如何读取参数并就参数做相应的处理呢? 我以前看到过的一个方法是这样的。java中命令行参数是作为字符串存储在传递给main()函数的String数组中。先把字符串转换成StringBuff,然后用getnexttoken(),得到下一个字符标识,例如:如果-h help,那么这个函数可以先后得到-h和help,可以通过判断是否以"-"开头来区分选项和参数。在java中还有一个很有用的东西,那就是方法集对象,它可以把本类中的所有的方法用方法名记录下来,这样你就可以用和参数名相同方法名来定义方法。方法集对象在找到和某个方法名相同的参数是就用invoke()来调用相应的方法,你需要参数做什么就设置在这个方法里面。我以前看的那个程序是在方法中设置了布尔变量,来控制程序的流程。java中大概就是这么解析命令行参数的,可能有些地方表述得不清楚或者不对的,请大家指教。 欢迎大家留言,我每天都回来看。 |