免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8930 | 回复: 9
打印 上一主题 下一主题

在Linux中有直接读写配置文件的各个键值的接口嘛? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-09-02 18:03 |只看该作者 |倒序浏览
如题:
比如
test.cfg

[test]
DEBUG=1
Content="test"

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

论坛徽章:
0
2 [报告]
发表于 2003-09-03 08:09 |只看该作者

在Linux中有直接读写配置文件的各个键值的接口嘛?

没有现成的,自己写一套吧,
但可以找到XML的分析器源码,Apache中就包含了

论坛徽章:
0
3 [报告]
发表于 2003-09-03 08:45 |只看该作者

在Linux中有直接读写配置文件的各个键值的接口嘛?

没有的,要自己写程序来实现,也很简单阿

论坛徽章:
0
4 [报告]
发表于 2003-09-03 09:33 |只看该作者

在Linux中有直接读写配置文件的各个键值的接口嘛?

谢谢,明白了。我是怕孤陋寡闻浪费了前辈们的成果,也浪费时间。

论坛徽章:
0
5 [报告]
发表于 2003-09-09 17:17 |只看该作者

在Linux中有直接读写配置文件的各个键值的接口嘛?

我有。

论坛徽章:
0
6 [报告]
发表于 2003-09-09 17:54 |只看该作者

在Linux中有直接读写配置文件的各个键值的接口嘛?

  1. /
  2. *********************************************
  3.         FileName:        FileScan.c
  4.         Describe:        Functions For Read Config File
  5.         Author:                Eboy
  6.         Date:                2003.8.28
  7. ****************************************************/
  8. #ifdef _WINDOWS_
  9. #include <windows.h>;
  10. #include <winbase.h>;
  11. #endif
  12. #include <stdio.h>;
  13. #include <stdlib.h>;
  14. #include <string.h>;

  15. #define CONF_FILE_MAX_LINE        50
  16. #define CONF_FILE_MAX_ROW        100
  17. /*
  18. *        函数名:IsBreakChar()
  19. *        功能:        判断是否为行结束符
  20. *        返回值:1表示真,0表示假
  21. *        参数说明:char ch 需要判断的字符
  22. *
  23. */
  24. int IsBreakChar(char ch)
  25. {
  26.         if(ch==9)        //Tab Key
  27.                 return 0;
  28.         if((ch<32)&&(ch>;0))
  29.                 return 1;
  30.         else
  31.                 return 0;
  32. }
  33. /*
  34. *        函数名:ReadLine()
  35. *        功能:        从文件中读出一行
  36. *        参数说明:FILE* fpt 文件描述符
  37. *                 char* linestr 输出数据,结尾为'\0'的字符串
  38. */
  39. int ReadLine(FILE* fpt, char *linestr)
  40. {
  41.         int i,rv;
  42.         char cc;
  43.         char buf[CONF_FILE_MAX_ROW];

  44.         if(feof(fpt)){
  45.                 return 1;
  46.         }
  47.         for(i=0;i<CONF_FILE_MAX_ROW;i++){
  48.                 rv=fread(&cc,1,1,fpt);
  49.                 if(rv<1)
  50.                         break;
  51.                 if(IsBreakChar(cc)==1)
  52.                         break;
  53.                 buf[i]=cc;
  54.         }
  55.         buf[i]='\0';
  56.         strcpy(linestr,buf);
  57.         return 0;       
  58. }
  59. /*
  60. *        函数名:TrimSpace()
  61. *        功能:        将字符串中的空格删除
  62. *        参数说明:char_PTR ori 输入字符串
  63. *                 char * trim 输出字符串
  64. */
  65. int TrimSpace(char * ori,char * trim)
  66. {
  67.         int i,j,qq,len;
  68.         char tmp[CONF_FILE_MAX_ROW];

  69.         j=qq=0;
  70.         len=strlen(ori);
  71.         for(i=0;i<len;i++){
  72.                 if(qq==1)
  73.                         tmp[j]=ori[i];
  74.                 else{
  75.                         if(ori[i]<33)
  76.                                 continue;
  77.                         else{
  78.                                 tmp[j]=ori[i];
  79.                                 qq=1;
  80.                         }
  81.                 }
  82.                 j++;
  83.         }
  84.         tmp[j]='\0';

  85.         j=qq=0;
  86.         for(i=strlen(tmp)-1;i>;=0;i--){
  87.                 if(qq==1)
  88.                         trim[j]=tmp[i];
  89.                 else{
  90.                         if(tmp[i]<33)
  91.                                 continue;
  92.                         else{
  93.                                 trim[j]=tmp[i];
  94.                                 qq=1;
  95.                         }
  96.                 }
  97.                 j++;
  98.         }
  99.         trim[j]='\0';
  100.         j=strlen(trim);
  101.         for(i=0;i<j;i++){
  102.                 tmp[i]=trim[j-i-1];
  103.         }
  104.         memcpy(trim,tmp,j);
  105.         return 0;
  106. }

  107. /*
  108. *        函数名:ReadSector()
  109. *        功能:        从输入字符串中分解出指定项的值
  110. *        返回值: 如果成功返回0
  111. *        参数说明:char * line 输入字符串
  112. *                 char * SectName 指定域的名称
  113. *                  char * SectVa   输出指定域的值(返回成功时有效)
  114. */
  115. int ReadSector(char * line,char * SectName,char * SectVal)
  116. {
  117.         int i;
  118.         int tlen,equpos=0;
  119.         char lineBuf[CONF_FILE_MAX_ROW];
  120.         char oriSectName[CONF_FILE_MAX_ROW],tmpSectName[CONF_FILE_MAX_ROW];
  121.         char oriSectVal[CONF_FILE_MAX_ROW];
  122.        
  123.         TrimSpace(line,lineBuf);
  124.         tlen=strlen(lineBuf);
  125.         for(i=0;i<tlen;i++){
  126.                 if((lineBuf[i]=='#')||(lineBuf[i]==';'))
  127.                         break;
  128.         }
  129.         if(i==0)
  130.                 return 1;
  131.         lineBuf[i]='\0';
  132.         tlen=strlen(lineBuf);
  133.         for(i=0;i<tlen;i++){
  134.                 if(lineBuf[i]=='='){
  135.                         equpos=i;
  136.                         break;
  137.                 }
  138.         }
  139.         if(equpos==0)
  140.                 return 1;
  141.         memcpy(oriSectName,lineBuf,equpos);
  142.         oriSectName[equpos]='\0';
  143.         TrimSpace(oriSectName,tmpSectName);
  144.         if((SectName[0]=='#')||(SectName[0]==';')){
  145.                 return 1;
  146.         }
  147.         if(strcmp(tmpSectName,SectName))
  148.                 return 1;
  149.         memcpy(oriSectVal,lineBuf+equpos+1,tlen-equpos-1);
  150.         oriSectVal[tlen-equpos-1]='\0';
  151.         TrimSpace(oriSectVal,SectVal);
  152.         return 0;
  153. }
  154. /*
  155. *        函数名:AnalizeConfFile()
  156. *        功能:        从指定文件中分解出指定域的值
  157. *        返回值: 如果成功返回0
  158. *        参数说明:char * Filename 指定配置文件名
  159. *                 char * SectName 指定域的名称
  160. *                  char * SectVa   输出指定域的值(返回成功时有效)
  161. */
  162. int AnalizeConfFile(char * Filename,char * sector,char * sectval)
  163. {
  164.         int i,rv,flag=0;
  165.         FILE *fp;
  166.         char line[CONF_FILE_MAX_LINE];
  167.         char syspath[256];

  168. #ifdef _WINDOWS_
  169.         if(Filename!=NULL)
  170.                 strcpy(syspath,Filename);
  171.         if(Filename == NULL)
  172.         {
  173.                 if ((rv = GetSystemDirectory(syspath,256))<=0)
  174.                 {
  175.                 ErrorLocation;
  176.                 return 1;
  177.                 }
  178.                 if (rv >; 3)
  179.                 strcat(syspath,"/MyFile.ini");
  180.                 else
  181.                 strcat(syspath,"MyFile.ini");
  182.                 //#endif
  183.         }
  184. #else
  185.         if(Filename != NULL)
  186.         {
  187.                 strcpy(syspath,Filename);
  188.         }
  189.         if(Filename ==NULL)
  190.         {
  191.                 strcpy(syspath,"/etc/MyFile.ini");
  192.         }
  193. #endif
  194.         fp=fopen(syspath,"r");
  195.         if(fp==NULL)
  196.         {
  197.                 return 1;
  198.         }
  199.         for(i=0;i<CONF_FILE_MAX_LINE;i++)
  200.         {
  201.                 rv = ReadLine(fp,line);
  202.                 if(rv != 0)
  203.                         break;
  204.                 if(ReadSector(line,sector,sectval)==0)
  205.                 {
  206.                         flag = 1;
  207.                         break;
  208.                 }
  209.         }
  210.         if (flag == 0)
  211.                 return -1;
  212.         fclose(fp);
  213.         return 0;
  214. }
复制代码
   
使用时直接调用AnalizeConfFile函数即可。

论坛徽章:
0
7 [报告]
发表于 2003-09-10 09:04 |只看该作者

在Linux中有直接读写配置文件的各个键值的接口嘛?

用xml+expat吧,很方便的,而且expat还可以很容易的在vc上编译。

论坛徽章:
0
8 [报告]
发表于 2011-03-07 14:51 |只看该作者
好东西,来顶顶!

论坛徽章:
0
9 [报告]
发表于 2011-03-07 21:37 |只看该作者
使用时直接调用AnalizeConfFile函数即可。
eboymcy 发表于 2003-09-09 17:54



    好人啊

论坛徽章:
0
10 [报告]
发表于 2011-03-08 10:21 |只看该作者
本帖最后由 Hecate_Eos 于 2011-03-08 10:23 编辑

回复 1# CloseToFree


GLib中的GKeyFile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP