记得自己原先写ls函数的时候,没有使用什么命令行参数处理函数,都是自己编写的函数实现的命令行参数的处理,今天在学习POSIX进程间通信的时候发现有一个函数getopt()其实就是专门来做这个事情的,把这个函数的使用简单总结一下吧。
这个函数的定义如下:
int getopt(int argc,char * const argv[ ],const char * optstring);
这个函数包含在头文件中,所以我们使用的时候,只须把这个头文件加进来就可以调用了。
与这个函数相关的有3个全局变量,我们得学习一下。
optarg——指向当前选项参数(如果有)的指针
optind——再次调用 getopt() 时的下一个 argv 指针的索引
optopt——最后一个已知选项
关于着三个变量,自己写个程序看一下,看一看它们到底代表的是什么。下面是一个简单的程序:
- #include <unistd.h>
-
#include <stdio.h>
-
-
int main(int argc, char *argv[])
-
{
-
int ch;
-
printf("%d %s\n", optind, optarg);
-
while((ch = getopt(argc, argv, "a:b::c:")) != -1) {
-
switch(ch) {
-
case 'a':
-
printf("a:%s %d %d\n", optarg, optind, optopt);
-
break;
-
case 'b':
-
printf("b:%s %d %d\n", optarg, optind, optopt);
-
break;
-
case 'c':
-
printf("c:%s %d %d\n", optarg, optind, optopt);
-
break;
-
default:
-
break;
-
}
-
}
-
return 0;
-
}
我们再来看一下这个程序的执行:
- ^_^[sunny@sunny-laptop ~/c_test]13$ ./a.out -a aaa -bfan -c cccc
- 1 (null)
- a:aaa 3 0
- b:fan 4 0
- c:cccc 6 0
- ^_^[sunny@sunny-laptop ~/c_test]14$ ./a.out -b fan
- 1 (null)
- b:(null) 2 0
- ^_^[sunny@sunny-laptop ~/c_test]15$ ./a.out -a fan
- 1 (null)
- a:fan 3 0
- ^_^[sunny@sunny-laptop ~/c_test]16$
程序说明:在getopt()的第三个参数实际上表示的是你所要求的命令行参数的格式要求,在本程序中的“a:b::c:”表示,参数是a,b,或者是c。“:”表示,需要一个空格,后面得再加一个参数,“::”表示后面不需要空格,得再加一个参数,所以现在的话,我们就能简单的使用这个很好的命令行参数处理函数了~
另外,我们还有一个函数getopt_long()函数,这个函数我没有使用过,估计和这个差不多吧~~
阅读(1658) | 评论(0) | 转发(0) |