论坛首页 编程语言技术论坛

c语言中如何开发CLI

浏览 2087 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-01-09   最后修改:2009-01-10
C
在一些底层的系统中,一定都是采用C作为开发语言,而且底层与UI进行交互,一般都会采用CLI来实现,CLI(Command Line Interface)也就是命令行接口。一定来说都是通过它来提供接口给UI或者一些高级用法。

熟悉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。









论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics