CLI (Command Line Interface) 命令行接口,是底层操作系统必备的工具, 其实它的思路不复杂, 定义一个全局的数组定义整个系统的命令集合, 然后通过注册CLI,撤销CLI等操作对全局数据.在用户入口处加一监听线程, 然后历遍分析输入的数据是否需要属于系统指令.
//==============部分源码实现============================//
#include "string.h"
struct tag_cli_cmd ///命令行结构体
{
const char* name; //命令名
const char* intro; ///用法介绍
void (*func)(char* inBuf,int i); ///执行函数
};
//各个指令的执行函数
void help_cmd(char *inBuf,int i){
printf("\r\n_____list the help message_____\r\n");
}
void ver_cmd(char *inBuf,int i){
printf("\r\n____show your version_____\r\n");
}
void ipconfig_cmd(char *inBuf,int i){
printf("\r\n____config your system ip_____\r\n");
}
void clr_cmd(char *inBuf,int i){
printf("\r\n____clean the screen_____\r\n");
}
/// //内置一些固化的指令,和ms-dos类似
static const struct tag_cli_cmd cmdList[]={
{"help","show commands list.",help_cmd},
{"version","show version for system ",ver_cmd},
{"ipconfig","ip address setting",ipconfig_cmd},
{"clr","clean screen",clr_cmd},
};
int main(int argc, char* argv[])
{
int i;
int len=sizeof(cmdList)/sizeof(struct tag_cli_cmd);
printf("-----Current Command Number:%d-----\n",len);
for(i=0;i<len;i++)
{
printf("\n<%d> CMD:%-20s MSG:%s ",i,cmdList[i].name,cmdList[i].intro);
}
printf("\n\n Please Input command! [help]: ");
char cmdIn[20]={0};
scanf("%s",cmdIn);
for(i=0;i<len;i++){
if(!strcmp(cmdIn,cmdList[i].name)){
printf("Got Command index:%d",i);
cmdList[i].func(0,0);///执行相应函数
break;
}
}
if(i>=len)
{
printf(" '%s' is a bad command !",cmdIn);
}
printf("\n\n______End__________\n");
return 0;
}