C解析config
阿新 • • 發佈:2018-01-05
rcm clas ont gpo ets erro printf 配置文件 lib
#cat bb.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <errno.h> #define KEYVALLEN 100 /* Delete left side blank */ 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); } /* Delete right side blank */ 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; } /* Delete both side blank */ 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; } 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 ; } else if (strncmp(buf,appname, strlen(appname))==0){ found = 1; continue; } } 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) ); 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]; char dev[10]; GetProfileString("./bb.txt", "cls_server", "ip", ip); GetProfileString("./bb.txt", "device", "dev", dev); printf("%s\n", ip); printf("%s\n", dev); }
#cat bb.txt
[cls_server]
#配置文件等號左右可以有空格也可以沒有
ip=192.16.31.2
[device]
dev=sda
C解析config