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);
}
配置文件例子如下:
[cls_server]
#配置文件等号左右可以有空格也可以没有
ip=192.16.31.2
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux c读取配置文件
- linux c 读取配置文件
- 读写配置文件--C语言版
- 读取配置文件源代码[linux c]
- linux c 使用libxml2读取配置文件
- linux编程(C语言读取配置文件)
- Linux下用C读取INI配置文件
- 统治世界的十大算法
- 第十五周项目3-电子词典
- 学习 OpenGL 和 OpenCL 的互操作性
- 关于hadoop putMerge 出错“wrong FS”问题
- varchar2最大长度的陷阱
- linux读取配置文件(C语言版)
- oj-输出学生信息
- IntelliJ IDEA 13试用手记
- percona-toolkit工具包的使用教程之性能类工具
- Maven配置多个源文件夹
- server locations修改问题
- 动态修改窗口标题和类名
- percona-toolkit工具包的使用教程之配置类工具
- 七 CocosEditor基础教程第二季 之TiledMap