中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
在Linux中有直接读写配置文件的各个键值的接口嘛?
作者:未知 时间:2005-09-13 19:25 出处:ChinaUnix.net 责编:chinaitpower
              摘要:在Linux中有直接读写配置文件的各个键值的接口嘛?

如题:
比如
test.cfg

[test]
DEBUG=1
Content="test"

有可以直接读取倒KeyEBUG的值1的接口吗?

 sca_99 回复于:2003-09-03 08:09:16
没有现成的,自己写一套吧,
但可以找到XML的分析器源码,Apache中就包含了

 yingxiongl 回复于:2003-09-03 08:45:00
没有的,要自己写程序来实现,也很简单阿

 CloseToFree 回复于:2003-09-03 09:33:56
谢谢,明白了。我是怕孤陋寡闻浪费了前辈们的成果,也浪费时间。

 eboymcy 回复于:2003-09-09 17:17:28
我有。

 eboymcy 回复于:2003-09-09 17:54:06
[code:1:13547ca406]/
*********************************************
FileName: FileScan.c
Describe: Functions For Read Config File
Author: Eboy
Date: 2003.8.28
 ****************************************************/
#ifdef _WINDOWS_
#include <windows.h>
#include <winbase.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CONF_FILE_MAX_LINE 50
#define CONF_FILE_MAX_ROW 100
/*
 * 函数名:IsBreakChar()
 * 功能: 判断是否为行结束符
 * 返回值:1表示真,0表示假
 * 参数说明:char ch 需要判断的字符
 *
 */
int IsBreakChar(char ch)
{
if(ch==9) //Tab Key
return 0;
if((ch<32)&&(ch>0))
return 1;
else
return 0;
}
/*
 * 函数名:ReadLine()
 * 功能: 从文件中读出一行
 * 参数说明:FILE* fpt 文件描述符
 *  char* linestr 输出数据,结尾为'\0'的字符串
 */
 int ReadLine(FILE* fpt, char *linestr)
{
int i,rv;
char cc;
char buf[CONF_FILE_MAX_ROW];

if(feof(fpt)){
return 1;
}
for(i=0;i<CONF_FILE_MAX_ROW;i++){
rv=fread(&cc,1,1,fpt);
if(rv<1)
break;
if(IsBreakChar(cc)==1)
break;
buf[i]=cc;
}
buf[i]='\0';
strcpy(linestr,buf);
return 0;
}
 /*
 * 函数名:TrimSpace()
 * 功能: 将字符串中的空格删除
 * 参数说明:char_PTR ori 输入字符串
 *  char * trim 输出字符串
 */
 int TrimSpace(char * ori,char * trim)
{
int i,j,qq,len;
char tmp[CONF_FILE_MAX_ROW];

j=qq=0;
len=strlen(ori);
for(i=0;i<len;i++){
if(qq==1)
tmp[j]=ori[i];
else{
if(ori[i]<33)
continue;
else{
tmp[j]=ori[i];
qq=1;
}
}
j++;
}
tmp[j]='\0';

j=qq=0;
for(i=strlen(tmp)-1;i>=0;i--){
if(qq==1)
trim[j]=tmp[i];
else{
if(tmp[i]<33)
continue;
else{
trim[j]=tmp[i];
qq=1;
}
}
j++;
}
trim[j]='\0';
j=strlen(trim);
for(i=0;i<j;i++){
tmp[i]=trim[j-i-1];
}
memcpy(trim,tmp,j);
return 0;
}

/*
 * 函数名:ReadSector()
 * 功能: 从输入字符串中分解出指定项的值
 * 返回值: 如果成功返回0
 * 参数说明:char * line 输入字符串
 *  char * SectName 指定域的名称
 *   char * SectVa   输出指定域的值(返回成功时有效)
 */
 int ReadSector(char * line,char * SectName,char * SectVal)
{
int i;
int tlen,equpos=0;
char lineBuf[CONF_FILE_MAX_ROW];
char oriSectName[CONF_FILE_MAX_ROW],tmpSectName[CONF_FILE_MAX_ROW];
char oriSectVal[CONF_FILE_MAX_ROW];

TrimSpace(line,lineBuf);
tlen=strlen(lineBuf);
for(i=0;i<tlen;i++){
if((lineBuf[i]=='#')||(lineBuf[i]==';'))
break;
}
if(i==0)
return 1;
lineBuf[i]='\0';
tlen=strlen(lineBuf);
for(i=0;i<tlen;i++){
if(lineBuf[i]=='='){
equpos=i;
break;
}
}
if(equpos==0)
return 1;
memcpy(oriSectName,lineBuf,equpos);
oriSectName[equpos]='\0';
TrimSpace(oriSectName,tmpSectName);
if((SectName[0]=='#')||(SectName[0]==';')){
return 1;
}
if(strcmp(tmpSectName,SectName))
return 1;
memcpy(oriSectVal,lineBuf+equpos+1,tlen-equpos-1);
oriSectVal[tlen-equpos-1]='\0';
TrimSpace(oriSectVal,SectVal);
return 0;
}
/*
 * 函数名:AnalizeConfFile()
 * 功能: 从指定文件中分解出指定域的值
 * 返回值: 如果成功返回0
 * 参数说明:char * Filename 指定配置文件名
 *  char * SectName 指定域的名称
 *   char * SectVa   输出指定域的值(返回成功时有效)
 */
int AnalizeConfFile(char * Filename,char * sector,char * sectval)
{
int i,rv,flag=0;
FILE *fp;
char line[CONF_FILE_MAX_LINE];
char syspath[256];

#ifdef _WINDOWS_
if(Filename!=NULL)
strcpy(syspath,Filename);
if(Filename == NULL)
{
if ((rv = GetSystemDirectory(syspath,256))<=0)
{
ErrorLocation;
return 1;
}
if (rv > 3)
strcat(syspath,"/MyFile.ini");
else
strcat(syspath,"MyFile.ini");
//#endif
}
#else
if(Filename != NULL)
{
strcpy(syspath,Filename);
}
if(Filename ==NULL)
{
strcpy(syspath,"/etc/MyFile.ini");
}
#endif
fp=fopen(syspath,"r");
if(fp==NULL)
{
return 1;
}
for(i=0;i<CONF_FILE_MAX_LINE;i++)
{
rv = ReadLine(fp,line);
if(rv != 0)
break;
if(ReadSector(line,sector,sectval)==0)
{
flag = 1;
break;
}
}
if (flag == 0)
return -1;
fclose(fp);
return 0;
}
[/code:1:13547ca406]     
使用时直接调用AnalizeConfFile函数即可。

 bigluo 回复于:2003-09-10 09:04:10
用xml+expat吧,很方便的,而且expat还可以很容易的在vc上编译。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有