博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux读取配置文件(C语言版)
阅读量:4162 次
发布时间:2019-05-26

本文共 2833 字,大约阅读时间需要 9 分钟。

kvconf.h

#define KEYVALLEN 256/*   删除左边的空格   */char * l_trim(char * szOutput, const char *szInput);/*   删除右边的空格   */char *r_trim(char *szOutput, const char *szInput);/*   删除两边的空格   */char * a_trim(char * szOutput, const char * szInput);int GetProfileString(char *profile, char *AppName, char *KeyName, char *KeyVal );
kvconf.c

#include 
#include
#include
#include
#include
#include
#include "kvconf.h"/* 删除左边的空格 */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);}int main(){ char ip[16]; GetProfileString("./cls.conf", "cls_server", "ip", ip); printf("%s\n",ip); return 0;}
配置文件例子如下:

cls.conf

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

转载地址:http://pcixi.baihongyu.com/

你可能感兴趣的文章
LDD3源码分析之llseek分析
查看>>
linux read 用法
查看>>
LDD3源码分析之llseek分析(二)
查看>>
printk及控制台的日志级别
查看>>
Linux驱动加载实例
查看>>
详解数据库设计中的三大范式理论
查看>>
JDBCUtils工具类
查看>>
Linux基本命令(1)
查看>>
Linux基本命令(二)
查看>>
Hive2.0函数大全(中文版)
查看>>
hive里面的连接操作(join)
查看>>
卸载oracle
查看>>
hive 自定义函数jar发布的方法
查看>>
对DMA传输机制的学习
查看>>
QT中this指针
查看>>
java中的异常机制
查看>>
java SE面向对象思维导图
查看>>
SuperMap iClient3D for WebGL教程(Entity)-EllipseGraphics
查看>>
SuperMap iClient3D for WebGL教程(Entity)-EllipsoidGraphics
查看>>
SuperMap iClient3D for WebGL教程(Entity)-LabelGraphics
查看>>