|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <assert.h>
- #include <errno.h>
- 3 t! d, A+ F$ P' `) O6 E
- #define KEYVALLEN 100
- 9 E, {" c; S+ ?" ] x& Z& ~
- /* 删除左边的空格 */
- char * l_trim(char * szOutput, const char *szInput)
- {
- assert(szInput != NULL);
- assert(szOutput != NULL);
- assert(szOutput != szInput);
- for (NULL; *szInput != '\0' && isspace(*szInput); ++szInput){
- ;
- }
- return strcpy(szOutput, szInput);
- }
O3 m1 T3 U( {: I5 O1 r8 B- /* 删除右边的空格 */
- char *r_trim(char *szOutput, const char *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;
- }
/ J& b: w l- h. j) F- /* 删除两边的空格 */
- char * a_trim(char * szOutput, const char * 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;
- }
6 N# \/ W, l9 }( X5 A- 3 _8 @0 }/ A! a/ o& E9 C
- 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 );
. |$ Y: P- h! b" Z- 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;
- # V, y [- b* P9 j" {) C/ {
- if( found == 0 ){
- if( buf[0] != '[' ) {
- continue;
- } else if ( strncmp(buf,appname,strlen(appname))==0 ){
- found = 1;
- continue;
- }
& h' K& P8 z: e, Z- } else if( found == 1 ){
- if( buf[0] == '#' ){
- continue;
- } else if ( buf[0] == '[' ) {
- break;
- } else {
- if( (c = (char*)strchr(buf, '=')) == NULL )
- continue;
- memset( keyname, 0, sizeof(keyname) );
& P: f7 N/ r) X7 v: w9 Q- 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);
- }
- . a& E, e! K& x* ]& w
- void main()
- {
- char ip[16];
- GetProfileString("./cls.conf", "cls_server", "ip", ip);
- printf("%s\n",ip);
- }9 e% H1 r' x* ^& u: a
, p* X$ {; N. N2 Y( ?
8 V5 t* K# d8 v4 z4 j
配置文件例子如下:
: D# h! ^" E5 ?: o+ h
; C, L3 {) \* o6 q/ k# r3 {& ~. T- [cls_server]
- #配置文件等号左右可以有空格也可以没有
- ip=192.16.31.2
, L. Z+ q9 y: E
7 K9 R8 d" g) r6 D1 k1 S |
|