linux读取配置文件(C语言版)
2014-04-03 17:42
218 查看
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
#define KEYVALLEN 100
/* 删除左边的空格 */
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);
}
/* 删除右边的空格 */
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;
}
/* 删除两边的空格 */
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];
GetProfileString("./cls.conf", "cls_server", "ip", ip);
printf("%s\n",ip);
}
配置文件例
配置文件例子如下:
相关文章推荐
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- 分享一个linux下的C程序读取配置文件的方法
- linux下读取简单文本配置文件C程序
- Linux环境用C语言实现读取配置文件来区分产品的多个版本以及多个功能
- linux基础--用户登录时读取配置文件顺序
- linux下读取conf配置文件c语言函数库ccl
- Linux读取属性配置文件注意事项
- 读取配置文件GetProfileString(linux版)
- 一只简单的网络爬虫(基于linux C/C++)————配置文件设计及读取
- 用C读取INI配置文件 (可在linux平台上用)
- Linux下程序启动之后的初始化---检查配置文件及读取日志配置项的值
- Linux下用C读取INI配置文件
- 读取配置文件源代码[linux c]