linux读取配置文件(C语言版)

来源:互联网 发布:芜湖县淘宝产业园 编辑:程序博客网 时间:2024/05/17 03:41


#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<assert.h>

#include<errno.h>


#define KEYVALLEN 100

/*

 删除左边的空格   */

char * l_trim(char * szOutput,constchar *szInput)

{

    assert(szInput !=NULL);

    assert(szOutput !=NULL);

    assert(szOutput != szInput);

   

   for   (NULL; *szInput !='\0' && isspace(*szInput); ++szInput){

        ;

    }

    

   return strcpy(szOutput, szInput);

}


/*   删除右边的空格   */

char *r_trim(char *szOutput,constchar *szInput)

{

   char *p =NULL;

    assert(szInput !=NULL);

    assert(szOutput !=NULL);

    assert(szOutput != szInput);

    strcpy(szOutput, szInput);

   for(p = szOutput + strlen(szOutput) -1; p >= szOutput && isspace(*p); --p){

        ;

    }

    *(++p) ='\0';

   return szOutput;

}


/*   删除两边的空格   */

char * a_trim(char * szOutput,constchar * szInput)

{

   char *p =NULL;

    assert(szInput !=NULL);

    assert(szOutput !=NULL);

    l_trim(szOutput, szInput);

   for   (p = szOutput + strlen(szOutput) -1;p >= szOutput && isspace(*p); --p){

        ;

    }

    *(++p) ='\0';

   return szOutput;

}



int GetProfileString(char *profile,char *AppName,char *KeyName,char *KeyVal )

{

   char appname[32],keyname[32];

   char *buf,*c;

   char buf_i[KEYVALLEN], buf_o[KEYVALLEN];

    FILE *fp;

    int found=0;/* 1 AppName 2 KeyName */

   if( (fp=fopen( profile,"r" ))==NULL ){

        printf("openfile [%s] error [%s]\n",profile,strerror(errno) );

       return(-1);

    }

    fseek( fp,0, SEEK_SET );

    memset( appname,0,sizeof(appname) );

    sprintf( appname,"[%s]", AppName );

    

   while( !feof(fp) && fgets( buf_i, KEYVALLEN, fp )!=NULL ){

        l_trim(buf_o, buf_i);

       if( strlen(buf_o) <=0 )

           continue;

        buf =NULL;

        buf = buf_o;

        

       if( found ==0 ){

           if( buf[0] !='[' ) {

               continue;

            }elseif ( strncmp(buf,appname,strlen(appname))==0 ){

                found =1;

               continue;

            }

            

        }elseif( found ==1 ){

           if( buf[0] =='#' ){

               continue;

            }elseif ( buf[0] =='[' ) {

               break;

            }else {

               if( (c = (char*)strchr(buf,'=')) ==NULL )

                   continue;

                memset( keyname,0,sizeof(keyname) );

                

                sscanf( buf,"%[^=|^ |^\t]", keyname );

               if( strcmp(keyname, KeyName) ==0 ){

                    sscanf( ++c,"%[^\n]", KeyVal );

                   char *KeyVal_o = (char *)malloc(strlen(KeyVal) +1);

                   if(KeyVal_o !=NULL){

                        memset(KeyVal_o,0,sizeof(KeyVal_o));

                        a_trim(KeyVal_o, KeyVal);

                       if(KeyVal_o && strlen(KeyVal_o) >0)

                            strcpy(KeyVal, KeyVal_o);

                        free(KeyVal_o);

                        KeyVal_o =NULL;

                    }

                    found =2;

                   break;

                }else {

                   continue;

                }

            }

        }

    }

    fclose( fp );

   if( found ==2 )

       return(0);

   else

       return(-1);

}


void main()
{
        char ip[16];
        GetProfileString("./cls.conf","cls_server","ip", ip);
        printf("%s\n",ip);
}

配置文件例子如下:

1
2
3
[cls_server]
#配置文件等号左右可以有空格也可以没有
ip=192.16.31.2

0 0
原创粉丝点击