浏览 2087 次
锁定老帖子 主题:c语言中如何开发CLI
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-09
最后修改:2009-01-10
熟悉PERL或者其他一些脚本的人都知道,CLI实现起来是非常简单,想PERL就是采用GEOPT来实现的。同样在C语言里面也是很简单的。 下面我来详细介绍下getopt_long的用户。 首先讲下它所涉及的数据结构: 他的结构定义都在getopt.h这个结构体中,下面这个option是一个非常重要的结构体,它用于存储命令的参数以及缩写。 struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; 这个结构体是用于存储命令参数的,第一参数NAME就是我们参数的名字,第二个参数就是表示这个参数是否有参数值,最后一个val就是缩写。 我们来举个最简单的例子 struct option longopts[] = { /* { name has_arg *flag val } */ {"login_user", 1, 0, 'U'}, {"methodname", 0, 0, 'M'}, } 这个例子就定义了两个参数,第一个login_user第二个位methodname,而他们的缩写分别为U,和M 而且他们都是参数值的。 同时我们还需要定义一个char的字符指针 例如上面的例子我们就需要这样定义 char *shortopts = "U:M"; 这个指针指向了这些参数的缩写,如果它后面有冒号的话就表明它是带参数值的参数。反之则反。 上面我简述了下他的数据结构,下面它的一个重要函数出场了,它就是getopt_long extern int getopt_long (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) 他第一个参数就是参数的个数 也就是我们C语言中int main(int argc,char ** argv) 这里的argc 第二个参数就是这里的**argv 一个指向指针的指针,存放着各种命令参数。 第三个就是我们定义的 shortopts 第四个是我们的longopts 它每执行一次获取一个参数,并且会返回参数名的缩写对于的值,下面我来举个简单的例子 while((c=getopt_long(argc,argv,shortopts,longopts,0)) !=EOF) { switch(c) { case 'M': 这里就把我们输入的参数值获取过来。 } } 这里我们需要将一下一个全局变量 *optarg,它指向我们存放的参数值。 在case中我们需要将我们输入的参数值获取过来。 这样一来我们就可以轻松完成我们的CLI。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |